查询不喜欢列表的更简洁方法

时间:2013-12-11 20:33:57

标签: sql sql-server sql-server-2008

我有以下SQL查询:

Select X, Y  
FROM Table.dbo 
WHERE DESCRIPTION NOT LIKE 'X' 
    AND DESCRIPTION NOT LIKE 'Y' 
    AND DESCRIPTION NOT LIKE 'Z' 
    AND DESCRIPTION NOT LIKE 'A' 
    AND DESCRIPTION NOT LIKE 'B' 
    AND DESCRIPTION NOT LIKE 'C'  
    AND DESCRIPTION NOT LIKE 'D';

是否有更有效的方式来编写此查询?

理想情况下DESCRIPTION NOT LIKE 'Y','Z','A','B','C','D'等等。

谢谢!

1 个答案:

答案 0 :(得分:1)

你可以使用。

Select X, Y  
FROM YourTable
WHERE DESCRIPTION NOT LIKE '[A-DYZ]' 

我想也许你打算在模式中加入一个尾随的通配符?在这种情况下

WHERE DESCRIPTION NOT LIKE '[A-DYZ]%' 

如果模式任意不同,您可以使用

SELECT X,
       Y
FROM   YourTable
WHERE  NOT EXISTS (SELECT *
                   FROM   (VALUES ('%cars%'),
                                  ('%boats%'),
                                  ('%trains%')) V(C)
                   WHERE  DESCRIPTION LIKE V.C) 

或者使用CLR集成。安装正则表达式函数并搜索与正则表达式(cars|boats|trains)

不匹配的行