我需要根据 nvarchar(1000) 列中的一些文本匹配过滤掉记录。表有超过 40 万条记录并且还在增长。现在,我正在使用 Like 条件:-
SELECT
*
FROM
table_01
WHERE
Text like '%A1%'
OR Text like '%B1%'
OR Text like '%C1%'
OR Text like '%D1%'
有没有首选的工作?
我需要根据 nvarchar(1000) 列中的一些文本匹配过滤掉记录。表有超过 40 万条记录并且还在增长。现在,我正在使用 Like 条件:-
SELECT
*
FROM
table_01
WHERE
Text like '%A1%'
OR Text like '%B1%'
OR Text like '%C1%'
OR Text like '%D1%'
有没有首选的工作?
SELECT
*
FROM
table_01
WHERE
Text like '%[A-Z]1%'
这将检查文本是否包含 A1、B1、C1、D1、...
在 SQL Server中使用 Like 条件的参考
如果您知道子字符串的确切位置,可以尝试以下操作:
SELECT
*
FROM
table_01
WHERE
SUBSTRING(Text,1,2) in ('B1','C1','D1')
我需要这样做,以便我可以DatabaseName
在 SQL Server Profiler 跟踪模板中的列的筛选器中允许两个不同的数据库。
您所能做的就是填写Like
子句的正文。
使用John Hartscock 的回答中的参考资料,我发现 like 子句使用了一种有限的正则表达式模式。
对于 OP 的场景,MSMS 有解决方案。
假设我想要数据库 ABCOne、ABCTwo 和 ABCThree,我想出了每个字符本质上独立的白名单:
Like ABC[OTT][NWH][EOR]%
这很容易扩展到任何字符串集。它不会是铁定的,最后一个模式也将匹配 ABCOwe、ABCTnr 或 ABCOneHippotamus,但如果您过滤一组有限的可能值,则很有可能使其工作。
您也可以使用[^]
运算符显示不可接受字符的黑名单。