根据MySQL Reference Manual - The SET Type
通常,使用FIND_IN_SET()函数或LIKE运算符搜索SET值:
的MySQL> SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)> 0;
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
进行比较?
有什么不同吗?
答案 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中,值0
与FALSE
同义,而1
或更高的正数与TRUE
同义(请参阅documentation)。
所以这两个WHERE
子句的行为相同。