在MySQL中,如果返回false,为什么会出现这种情况?
在MySql中,如果if()函数的第一个参数是字符串,为什么返回false在MySQL中,如果返回false,为什么会出现这种情况?,mysql,if-statement,Mysql,If Statement,在MySql中,如果if()函数的第一个参数是字符串,为什么返回false SELECT IF('string', 'string', 'not string'); -- 'not string' 当然,如果我这样做了,我可以解决这个问题 IF(!ISNULL('string'), 'string', 'not string')) -- 'string' 或 它对字符串的求值方式似乎有点违反直觉,正如它所看到的那样 SELECT IF(1, 'one', 'not one'); -- 'on
SELECT IF('string', 'string', 'not string'); -- 'not string'
当然,如果我这样做了,我可以解决这个问题
IF(!ISNULL('string'), 'string', 'not string')) -- 'string'
或
它对字符串的求值方式似乎有点违反直觉,正如它所看到的那样
SELECT IF(1, 'one', 'not one'); -- 'one'
及
计算它们的方式…因为“string”既不是真的也不是假的,并且第一个表达式的计算结果应该是布尔值 为什么IF(1,…)的计算结果为true?好问题。可能是回到C(即,如果它是1,那么它是真的) 编辑:实际上,根据at命令的定义,如果expr1为0且expr1为NULL,则expr1为TRUE,这是expr1==1时的情况。。MySQL不认为字符串是谓词,因此默认为false。至于最后一个案例,很多语言(C,Perl等)认为非零整数是真的,所以MySQL只是支持这个范例。
从
IF(expr1、expr2、expr3) 如果expr1为TRUE(expr10和expr1为NULL),则If()返回 expr2;否则返回expr3。 IF()返回数字或字符串 值,具体取决于中的上下文 它被使用了 所以1是真的,因为1!=0和1!=无效的这就像你在C中看到的一样但是对于字符串来说,说“test”的计算结果为true在定义中没有实际依据,也没有逻辑意义。需要将其与布尔结果进行比较。注意,PHP中有相似之处:
"string" != 0 // false
"one" != 0 // false
"1" != 0 // true
这种混淆似乎是因为MySQL比较0(和null)来获得某个东西的布尔值。在其他语言中,如PHP和Javascript,当转换为布尔值时,字符串在非空(或非“0”)时返回true
如果你知道我的意思的话,那两行星号表示等价的比较。你完全正确,但显然MySQL的处理方式有所不同,也就是说,人们期望在expr1中出现数字或布尔运算,这将阻止使用字符串作为表达式。请选择IF('1','one','notone');返回'one'和what do SELECT
IF('2','two','nottwo')代码>做什么??
SELECT IF('1', 'one', 'not one'); -- 'one'
"string" != 0 // false
"one" != 0 // false
"1" != 0 // true
// php
0 == true // false
"string" == 0 // true*
"string" == true // true
// mysql
if(0, "true", "false") // false
if("string", "true", "false") // false*