什么!! (双重感叹)运算符在DB2中做什么?

时间:2015-07-29 09:09:49

标签: sql db2 operators

我发现了一个看起来像这样的sql代码。删除双重感叹语句(!! '')会返回完全相同的结果:

Select * from SomeTable a
where a.SOMEFIELD !! '' = 'SomeString'

!! ''做了什么?

2 个答案:

答案 0 :(得分:1)

在DB2 LUW中,这是不可能的:

db2 "create table SomeTable (SOMEFIELD int, col2 int)"
db2 "insert into SomeTable values (1,1),(2,2),(3,3)"
db2 "select * from SomeTable a where a.SOMEFIELD !! '' = '1'"
SQL0007N  The character "!" following "om t2 t where t.col1" is not valid.
SQLSTATE=42601

相反,@ mustaccio所说的是有效的:

db2 "select * from t2 t where t.col1 || '' = '1'"

COL1        COL2
----------- -----------
          1           1

  1 record(s) selected.

但是,null与某事物的串联结果为null; coalesce检查第一个值是否为null,然后返回第二个值:

db2 -x "values 'a' || 'b'"
ab
db2 -x "values NULL || ''"
-                                                                                                                                  

db2 -x "values NULL || 'b'"
-                                                                                                                                  

db2 -x "values coalesce(NULL, '')"

db2 -x "values coalesce(NULL, 'b')"
b

答案 1 :(得分:0)

!!运算符是一种连接形式。 在您的情况下,它用于强制将.SOMEFIELD转换为字符。