如何在sql server 2005中使用具有多个值的条件?

时间:2011-01-31 20:32:33

标签: sql sql-server sql-server-2005 tsql like-keyword

我需要根据nvarchar(1000)列中的一些文本匹配来过滤掉记录。 表有超过40万条记录并且还在增长。现在,我正在使用Like条件: -

SELECT 
    *
FROM
    table_01
WHERE
    Text like '%A1%'
    OR Text like '%B1%'
    OR Text like '%C1%'
    OR Text like '%D1%'

有没有首选的工作?

5 个答案:

答案 0 :(得分:8)

SELECT 
    *
FROM
    table_01
WHERE
    Text like '%[A-Z]1%'

这将检查文本是否包含A1,B1,C1,D1,......

参考使用Like Condition in SQL Server

答案 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相匹配,但如果您过滤了一组有限的可能值,那么很有可能让它成功。

您也可以使用[^]运算符来显示不可接受字符的黑名单。