繁体   English   中英

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

[英]How to use like condition with multiple values in sql server 2005?

我需要根据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')

看看msdn上的LIKE

您可以通过将更多详细信息组合到单个LIKE子句中来减少数字过滤器。

SELECT 
    *
FROM
    table_01
WHERE
    Text like '%[ABCD]1%'

我需要这样做,以便我可以在SQL Server Profiler跟踪模板中的DatabaseName列的过滤器中允许两个不同的数据库。

您所能做的就是填写Like子句的正文。

使用John Hartscock的答案中的引用,我发现like子句使用了一种有限的正则表达式模式。

对于OP的情况, MSMS有解决方案

假设我想要数据库ABCOne,ABCTwo和ABCThree,我想出了每个角色基本上是独立的白名单:

Like ABC[OTT][NWH][EOR]%

这可以很容易地扩展到任何字符串集。 它不会是铁定的,最后的模式也会与ABCOwe,ABCTnr或ABCOneHippotamus相匹配,但是如果你过滤了一组有限的可能值,那么你很有可能让它成功。

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

如果你可以在表的那一列上创建一个FULLTEXT INDEX (它假定对性能和空间进行了大量的研究),那么你可能会看到文本匹配的性能有了很大的提高。 您可以转到此链接查看FULLTEXT SEARCH是什么,以及此链接以了解如何创建FULLTEXT INDEX

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM