WHERE FIND_IN_SET(...)> 0和WHERE FIND_IN_SET(...)之间的区别

时间:2016-06-16 03:36:55

标签: mysql

根据MySQL Reference Manual - The SET Type

  

通常,使用FIND_IN_SET()函数或LIKE运算符搜索SET值:

     

的MySQL> SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)> 0;

根据MySQL Reference Manual

  

FIND_IN_SET(STR,strlist)

     

如果字符串str位于由N个子字符串组成的字符串列表strlist中,则返回1到N范围内的值。字符串列表是由用“,”字符分隔的子字符串组成的字符串。如果第一个参数是常量字符串而第二个参数是SET类型的列,则FIND_IN_SET()函数被优化为使用位算术。如果str不在strlist中,或者strlist是空字符串,则返回0。如果任一参数为NULL,则返回NULL。

因此,我认为

SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)
当你想从一个集合中找到值时,

可以正常工作。

那么为什么MySQL参考手册中的示例明确地与>0进行比较?

有什么不同吗?

1 个答案:

答案 0 :(得分:1)

考虑以下两个WHERE子句:

WHERE FIND_IN_SET('value', set_col) > 0
WHERE FIND_IN_SET('value', set_col)

在第一个中,如果sel_col中的任何条目包含value,则FIND_IN_SET()的返回值将是大于0的某个数字,否则它将为0.换句话说,如果找到TRUE,它将返回value,否则返回FALSE

第二个WHERE子句将评估为WHERE X,其中X为1或更高,如果找到value,则为value找不到。在MySQL中,值0FALSE同义,而1或更高的正数与TRUE同义(请参阅documentation)。

所以这两个WHERE子句的行为相同。