在MySQL中为什么这个IF返回false?

Sea*_*nJA 2 mysql if-statement

在MySql中,如果IF()函数的第一个参数是一个字符串,为什么它返回false?

SELECT IF('string', 'string', 'not string'); -- 'not string'
Run Code Online (Sandbox Code Playgroud)

当然,如果我这样做,我可以解决这个问题

IF(!ISNULL('string'), 'string', 'not string')) -- 'string'
Run Code Online (Sandbox Code Playgroud)

要么

IFNULL('string', 'not string'); -- 'string'
Run Code Online (Sandbox Code Playgroud)

它似乎有点违反直觉,它以一种字符串的形式评估字符串

SELECT IF(1, 'one', 'not one'); -- 'one'
Run Code Online (Sandbox Code Playgroud)

SELECT IF('1', 'one', 'not one'); -- 'one'
Run Code Online (Sandbox Code Playgroud)

评估他们做的方式......

Gav*_*n H 6

来自MySQL

IF(表达式1,表达式2,表达式3)

如果expr1为TRUE(expr1 <> 0且expr1 <> NULL)则IF()返回expr2; 否则返回expr3.IF()返回数值或字符串值,具体取决于使用它的上下文.

所以1是正确的,因为1!= 0和1!= NULL.这就像你在C中看到的那样.

但对于一个字符串,说'test'评估为true在定义中没有真正的基础,并且没有逻辑意义.它需要与布尔结果的某些东西进行比较.


Eva*_*her 5

给出的第一个参数IF()是谓词.MySQL不会将字符串视为谓词,因此默认为false.至于你的上一个案例,很多语言(C,Perl等)认为非零整数是真的,所以MySQL只是支持这种范式.