我们可以在"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
我可以使用特殊字符获取地址 **,而不是逐个检查每个特殊的字符。怎么
答案 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%')
形式的谓词规范应该产生相同的结果;它们在逻辑上是相同的请求。