数据库中的字段keywords存储的字符串是用逗号分割开的,如下
ID    keywords
1     beijing,xian,shanghai
2     xian,shenzhen
3     beijing,xian
输入字符串如 str="beijing travel tours..."
如何用SQL语句实现查找出keywords中用逗号分割开的各字符串存在输入字符串中的记录
以上就应该查出ID=1,3的记录
望各位帮帮忙,谢谢了

解决方案 »

  1.   

    --生成测试数据
    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
      

  2.   

    如何用SQL语句实现查找出keywords中用逗号分割开的各字符串存在输入字符串中的记录
    --------------------------------------------------------------------------
    是求首字母相同的,还是完全相同的?按你上面的要求,是首个单词相同的...
      

  3.   

    use pubs
    --生成测试数据
    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 行)--*/
      

  4.   

    上面的结果太凌乱了(字段keywords太长了),整理下给你...呵呵!/*--  结果  --原:                                                                                                                                                                                            
    ID          Keywords                                           
    ----------- -------------------------------------------------- 
    1           beijing,xian,shanghai                             
    2           xian,shenzhen                                     
    3           beijing,xian                                     (所影响的行数为 3 行)                                                                                                                                                                                        
    结果:
    id          
    ----------- 
    1
    3(所影响的行数为 2 行)--*/(以上的,若要迁移到你的程序中,需要把表变量改成你的实际表名,搜索字符串变量,改为你的实际值即可)
      

  5.   

    charindex   or partindex
      

  6.   

    fcuandy(www.iaspnet.com)是对的 不要给我分了 只用在百事创意大赛上
    http://jay.pepsi.163.com/article.jsp?id=16255
    点击"我也要帮他评分" 用163邮箱登陆 给我评分
    我还差几票