查询FIND_IN_SET

时间:2014-02-19 11:42:05

标签: mysql find-in-set

以下查询

SELECT ASSOCIATED_RISK 
FROM PROJECT_ISSUES
 WHERE FIND_IN_SET('98',ASSOCIATED_RISK);

将输出返回为

96,98

90,98

但如果我使用

SELECT ASSOCIATED_RISK
FROM PROJECT_ISSUES 
 WHERE FIND_IN_SET('96,98',ASSOCIATED_RISK);

它不会返回任何内容。在这种情况下,我想检索第一行。

96,98

3 个答案:

答案 0 :(得分:2)

使用AND子句,如下所示:

SELECT ASSOCIATED_RISK 
FROM PROJECT_ISSUES 
WHERE FIND_IN_SET('96',ASSOCIATED_RISK)
AND FIND_IN_SET('98',ASSOCIATED_RISK)

您的查询失败,因为如果第一个参数包含逗号(“,”)字符,则FIND_IN_SET()无法正常工作。参考:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set。在您的情况下,第一个参数是'96,98',因此它失败。

答案 1 :(得分:1)

您的评论:

  

有没有其他方法可以在单个查询中获取它而不是框架多个find_in_set并将它们连接起来

作为替代解决方案,您可以在locate值上使用ASSOCIATED_RISK

示例

locate( replace( '96,98', ',', '' ), replace( ASSOCIATED_RISK, ',', '' ) )

修改
根据{{​​1}}评论,我们可以看到,虽然搜索字符串不存在于目标字符串中,但仍有可能产生 true 结果。

作为替代解决方案,您可以使用空字符串替换目标字符串中的搜索字符串并比较长度。如果原始字符串的长度大于新替换的字符串,那么它是发现的真实结果。

示例

Aziz Shaikh

答案 2 :(得分:0)

这将给出结果。看到不同。

SELECT ASSOCIATED_RISK FROM PROJECT_ISSUES WHERE FIND_IN_SET(ASSOCIATED_RISK,'96,98');