我在MySQL中有关于IF()函数的问题。
我想返回一个字符串并更改变量的值。有点像:IF(@firstRow=1, "Dear" AND @firstRow:=0, "dear")
这仅输出“ 0”,而不是“ Dear” ...
对于解决此问题的方法,我将非常感谢!
路易:)
最佳答案
AND
是布尔运算符,而不是“也可以执行此操作”运算符。"Dear" AND 0
返回0,因为在MySQL中将0视为false
,并且<anything> AND false
将返回false
。
同样是因为"Dear"
的整数/布尔值也为0。在数字上下文中使用字符串只会读取字符串中的初始数字(如果有),而忽略其余数字。
目前尚不清楚您的问题是什么,但是如果该行是结果集中的第一行,那么我想您想将“亲爱的”一词大写。
不要为使副作用适合表达式而太聪明,而是帮自己一个忙,将其分解为单独的列:
mysql> SELECT IF(@firstRow=1, 'Dear', 'dear'), @firstRow:=0 AS _ignoreThis
-> FROM (SELECT @firstRow:=1) AS _init
-> CROSS JOIN
-> mytable;
+---------------------------------+-------------+
| IF(@firstRow=1, 'Dear', 'dear') | _ignoreThis |
+---------------------------------+-------------+
| Dear | 0 |
| dear | 0 |
| dear | 0 |
+---------------------------------+-------------+
但是,如果您真的想使代码尽可能混乱和不可读,则可以执行以下操作:
SELECT IF(@firstRow=1, CONCAT('Dear', IF(@firstRow:=0, '', '')), 'dear')
FROM (SELECT @firstRow:=1) AS _init
CROSS JOIN
...
但是请记住以下重要的代码质量指标:每分钟WTF。