我在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。

mysql - MySQL IF()中要做的两件事-LMLPHP

09-11 20:24