数据库中的字段keywords存储的字符串是用逗号分割开的,如下
ID keywords
1 beijing,xian,shanghai
2 xian,shenzhen
3 beijing,xian
输入字符串如 str="beijing travel tours..."
如何用SQL语句实现查找出keywords中用逗号分割开的各字符串存在输入字符串中的记录
以上就应该查出ID=1,3的记录
望各位帮帮忙,谢谢了
ID keywords
1 beijing,xian,shanghai
2 xian,shenzhen
3 beijing,xian
输入字符串如 str="beijing travel tours..."
如何用SQL语句实现查找出keywords中用逗号分割开的各字符串存在输入字符串中的记录
以上就应该查出ID=1,3的记录
望各位帮帮忙,谢谢了
DEClARE @tb TABLE(ID INT,Keywords CHAR(200))
INSERT @tb
SELECT
1, 'beijing,xian,shanghai'
UNION SELECT
2, 'xian,shenzhen'
UNION SELECT
3, 'beijing,xian'--待搜索字串
DECLARE @s CHAR(200)
SET @s='beijing travel'--显示搜索结果
SELECT ID,Keywords FROM @tb
LEFT JOIN
(SELECT ',' + a + ',' k FROM dbo.Split(@s,' ')) b
ON CHARINDEX(k,','+Keywords+',')>0 WHERE ISNULL(k,'')<>''附Split函数CREATE Function Split(@Sql varchar(8000),@Splits varchar(10))
returns @temp Table (a varchar(100))
As
Begin
Declare @i Int
Set @Sql = RTrim(LTrim(@Sql))
Set @i = CharIndex(@Splits,@Sql)
While @i >= 1
Begin
Insert @temp Values(Left(@Sql,@i-1))
Set @Sql = SubString(@Sql,@i+1,Len(@Sql)-@i)
Set @i = CharIndex(@Splits,@Sql)
EndIf @Sql <> ''
Insert @temp Values (@Sql)
Return
End
--------------------------------------------------------------------------
是求首字母相同的,还是完全相同的?按你上面的要求,是首个单词相同的...
--生成测试数据
DEClARE @tb TABLE(ID INT,Keywords CHAR(200))
INSERT @tb
SELECT 1,'beijing,xian,shanghai'
UNION SELECT 2,'xian,shenzhen'
UNION SELECT 3,'beijing,xian'
select * from @TbDeclare @str Varchar(100)
SET @str='beijing travel tours...'--如果是查与首单词相匹配的,则写上select如:
select id from @Tb where keywords like left(@str,charindex(' ',@str,0)-2)+'%'/*-- 结果 --原表:
ID Keywords
----------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 beijing,xian,shanghai
2 xian,shenzhen
3 beijing,xian (所影响的行数为 3 行)结果:
id
-----------
1
3(所影响的行数为 2 行)--*/
ID Keywords
----------- --------------------------------------------------
1 beijing,xian,shanghai
2 xian,shenzhen
3 beijing,xian (所影响的行数为 3 行)
结果:
id
-----------
1
3(所影响的行数为 2 行)--*/(以上的,若要迁移到你的程序中,需要把表变量改成你的实际表名,搜索字符串变量,改为你的实际值即可)
http://jay.pepsi.163.com/article.jsp?id=16255
点击"我也要帮他评分" 用163邮箱登陆 给我评分
我还差几票