我在SQL Server表的列中有一个字符串:
30,36,40,41,42,52,62,63,66,67,76
如您所见,此字符串的编号为62和66。
我正在使用此正则表达式来匹配此字符串:
%62%76%
但是它与该字符串不匹配。
如何更改此正则表达式以匹配提到的字符串?
SQL代码的一部分:
WHERE
(SELECT STUFF((SELECT ',' + CONVERT(NVARCHAR(MAX), TagID)
FROM ItemTag
WHERE ItemID = nt.ItemID
FOR XML PATH('')), 1, 1, '') AS tags) LIKE '%62%76%'
非常奇怪,但是当我使用%30%52%
时,它匹配字符串,但是当我使用%30%62%
时,没有匹配项。
答案 0 :(得分:2)
您需要指定ORDER BY TagID
,以确保根据LIKE
表达式的需要对TagID值进行排序:
WHERE (SELECT STUFF(
(
SELECT ',' + CONVERT(NVARCHAR(MAX), TagID)
FROM ItemTag
WHERE ItemID = nt.ItemID
ORDER BY TagID
FOR XML PATH('')
), 1, 1, '') as tags
) LIKE '%62%76%'
答案 1 :(得分:1)
这似乎是一种疯狂的方法,试图查看集合中是否有两个值。相反:
where exists (select 1
from ItemTags it
where it.ItemId = nt.ItemId and
it.tagid = 62
) and
exists (select 1
from ItemTags it
where it.ItemId = nt.ItemId and
it.tagid = 76
);
我为什么要使用“疯狂”之类的形容词(实际上从临床意义上讲,这并不是我的意思)?
EXISTS
应该非常有效,尤其是在ItemTags(itemId, tagId)
上具有索引的情况下。LIKE
根本不应该用于整数比较。