我需要根据nvarchar(1000)列中的一些文本匹配来过滤掉记录。 表有超过40万条记录并且还在增长。现在,我正在使用Like条件: -
SELECT
*
FROM
table_01
WHERE
Text like '%A1%'
OR Text like '%B1%'
OR Text like '%C1%'
OR Text like '%D1%'
有没有首选的工作?
答案 0 :(得分:8)
SELECT
*
FROM
table_01
WHERE
Text like '%[A-Z]1%'
这将检查文本是否包含A1,B1,C1,D1,......
答案 1 :(得分:5)
如果您知道子字符串的确切位置,则可以尝试以下操作:
SELECT
*
FROM
table_01
WHERE
SUBSTRING(Text,1,2) in ('B1','C1','D1')
答案 2 :(得分:4)
在msdn上查看 LIKE 。
您可以通过将更多详细信息合并到一个 LIKE 子句中来减少过滤器数量。
SELECT
*
FROM
table_01
WHERE
Text like '%[ABCD]1%'
答案 3 :(得分:0)
如果您可以在表的该列上创建FULLTEXT INDEX
(假设对性能和空间进行了大量研究),那么您可能会看到文本匹配的性能有了很大改进。您可以转到此link查看FULLTEXT SEARCH
是什么
以及link,了解如何创建FULLTEXT INDEX
。
答案 4 :(得分:0)
我需要这样做,这样我就可以在SQL Server Profiler跟踪模板中的DatabaseName
列的过滤器中允许两个不同的数据库。
您所能做的就是填写Like
条款的正文。
使用John Hartscock's answer中的引用,我发现like子句使用了一种有限的正则表达式模式。
对于OP的情况,MSMS has the solution。
假设我想要数据库ABCOne,ABCTwo和ABCThree,我想出了每个角色基本上是独立的白名单:
Like ABC[OTT][NWH][EOR]%
可以轻松扩展到任何字符串集。它不会是铁定的,最后的模式也会与ABCOwe,ABCTnr或ABCOneHippotamus相匹配,但如果您过滤了一组有限的可能值,那么很有可能让它成功。
您也可以使用[^]
运算符来显示不可接受字符的黑名单。