我们可以在sql中使用“NOT LIKE”吗?

时间:2012-02-15 21:09:31

标签: sql regex db2 sql-like

我们可以在"NOT LIKE '%abc%'"的正上方使用LIKE '%abc%'吗? 我试过并得到了一些结果,但看起来不正确!!

是否有类似于regex in SQL的内容。

例如:

我有一张3场的桌子。

id  name  address
1    xyz    1234 abcd 
2    abc    nomans land
3    omg    #123 new-york
3    nom    $123 &7up

我可以使用特殊字符获取地址 **,而不是逐个检查每个特殊的字符。怎么

4 个答案:

答案 0 :(得分:6)

在SQL Server中。如果你想要包含除字母数字和空格以外的字符的地址:

address LIKE '%[^0-9a-zA-Z ]%';

注意^字符表示“不在指定范围内的任何单个字符”。不确定DB2中是否存在非常类似的东西。

答案 1 :(得分:5)

当然,看here。也支持NOT LIKE。

答案 2 :(得分:3)

在db2(版本9.7.900.250)中,我用这种方式成功指定了“不喜欢”:

select * from orders
where not(orders.order_number like 'S%')

这显示订单#不以大写“S”开头的所有订单。

答案 3 :(得分:2)

没有描述什么是“尝试过并得到了一些结果但看起来不正确!!”关于主题调查,但在审查给定数据和OP的两个谓词时,请考虑以下内容;注意,次要正则表达式查询显然已经被回答和接受,因此在此回复中被忽略:

with
  xmp (id, name, address) as
( values ( 1  ,  'xyz'  ,  '1234 abcd '    )
       , ( 2  ,  'abc'  ,  'nomans land'   )
       , ( 3  ,  'omg'  ,  '#123 new-york' )
       , ( 3  ,  'nom'  ,  '$123 &7up'     )
)
select id
from xmp
where address NOT LIKE '%abc%'

上面的DB2查询应该产生集合{(2),(3),(3)};即包括除第一行以外的所有行。将谓词从address NOT LIKE '%abc%'更改为address LIKE '%abc%'应该会产生集合{(1)};即仅包括第一行。 address NOT LIKE '%abc%'NOT (address LIKE '%abc%')形式的谓词规范应该产生相同的结果;它们在逻辑上是相同的请求。