首页 > 解决方案 > 通配符 % 不能按预期工作

问题描述

我在 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%,没有匹配。

标签: sqlsql-serverregexwildcard

解决方案


您需要指定以确保 TagID 值根据表达式ORDER BY TagID的需要进行排序:LIKE

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%'

推荐阅读