请教个SQL语句问题。请大神指点

有个字段叫 作者姓名,该字段内内容为 “作者1,作者2,作者3”,现在想把这个字段里面作者一样,但顺序不一样的记录查找出来,该怎么写?

比如就是 “张三,李四,赵五” ,但有的记录里面为“赵五,张三,李四”,也不一定是这种顺序,就是名字完全一致,但排列的先后顺序不一样的字段。
更多 0

写个存储过程,游标遍历,取出这个字段值,按逗号分隔,判断是否 一样

非得在数据库中查么?按照每个作者取个list出来,再做个交集不就行了。
如果非得数据库中,同样的思路应该也行的通,分别取出张三,李四,赵五的记录做一个临时表,然后做inner join 。

有个投机取巧的办法:使用like, 利用第一个位置的特殊性。

select count(r.name), r.name from table where r.name like '张三,%' or r.name like '赵五,%' or r.name like '李四,%'

and 字符串长度一样
group by r.name

这样查到的数据应该满足你的需求。。

下面的语句能实现你的需求,T为你的表名

SELECT T1.[作者姓名]
       , STUFF((SELECT ', ' + CAST(T2.[姓名] AS VARCHAR(10)) [text()]
         FROM (
            SELECT T3.[作者姓名],  
                 Split.a.value('.', 'VARCHAR(100)') AS [姓名]  
             FROM  
             (
                 SELECT [作者姓名],  
                     CAST ('<M>' + REPLACE([作者姓名], ',', '</M><M>') + '</M>' AS XML) AS Data  
                 FROM  T
             ) AS T3 CROSS APPLY Data.nodes ('/M') AS Split(a)
         ) T2
         WHERE T2.[作者姓名] = T1.[作者姓名]
         ORDER BY [作者姓名], [姓名]
         FOR XML PATH(''), TYPE)
        .value('.','NVARCHAR(MAX)'), 1, 2, ' ') [作者姓名2]
FROM T T1
GROUP BY [作者姓名]
作者姓名    作者姓名2
张三,李四,赵五     李四, 张三, 赵五
赵五,张三,李四     李四, 张三, 赵五
作者1,作者2,作者3  作者1, 作者2, 作者3