我发现了一个看起来像这样的sql代码。删除双重感叹语句(!! ''
)会返回完全相同的结果:
Select * from SomeTable a
where a.SOMEFIELD !! '' = 'SomeString'
!! ''
做了什么?
答案 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转换为字符。