有个字段叫 作者姓名,该字段内内容为 “作者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