【问题标题】:What does the !! (double exclamation) operator do in DB2?是什么!! (双感叹号)运算符在 DB2 中做什么?
【发布时间】:2015-07-29 09:09:48
【问题描述】:

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

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

!! '' 有什么作用?

【问题讨论】:

  • 您确定这些是感叹号而不是竖线 (||)?
  • 是的,它们是感叹号,Jens 的回答是正确的。我也不知道有不同形式的连接。

标签: sql db2 operators


【解决方案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 检查第一个值是否为空,然后返回第二个:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 那么代码所有者是否只是想确保与“SomeString”比较的值也是一个字符串?
    猜你喜欢
    • 2020-05-03
    • 2011-01-11
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 2018-11-14
    相关资源
    最近更新 更多