我希望这个查询将所有列都返回为0,正确的表达式1是什么?
select (not(55))=1, !(55)=1, not(55)=1 ;
+-------------+---------+-----------+
| (not(55))=1 | !(55)=1 | not(55)=1 |
+-------------+---------+-----------+
| 0 | 0 | 1 |
+-------------+---------+-----------+
我发现这令人惊讶,不是!是不相等的,并且parens是重要的。
[编辑:简化了原帖的查询]
答案 0 :(得分:1)
在你的第一列代码就像(mysql执行代码的隐式评估(55)= 0)
select (55)=1 from dual; /* result 0 false*/
然后
select not (55)=1 from dual; /* resul 1 true alias not false */
答案 1 :(得分:0)
格雷格:
根据 IFNULL(expr1,expr2)的MYSQL文档:
如果expr1不为NULL,则IFNULL()返回expr1;否则它会返回 表达式2。 IFNULL()返回一个数字或字符串值,具体取决于 使用它的上下文。
参考:http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_ifnull
答案 2 :(得分:0)
在我看来,您看到的是比较=
运算符的优先级高于NOT
运算符:
NOT( IFNULL(55,0)) = 1
相当于NOT (IFNULL(55,0)=1)
(NOT( IFNULL(55,0))) = 1
相当于(NOT IFNULL(55,0)) = 1
!(IFNULL(55,0)) = 1
相当于看起来像什么;并表示!
的优先级高于或等于=
。
官方文档here证实了这一点。
我猜测!
和NOT
的不同优先级与稍微不同的语义和两个运算符的预期用途有关。我从未尝试过,但我很确定x IS !NULL
和x ! IN ([set])
是不允许的。