以下查询
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
答案 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');