以下查询
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
以下查询
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
使用该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',所以它失败了。
你的评论:
有没有其他方法可以在单个查询中获取它,而不是构建多个
find_in_set并连接它们
作为替代解决方案,您可以使用locate您的ASSOCIATED_RISK价值。
示例:
locate( replace( '96,98', ',', '' ), replace( ASSOCIATED_RISK, ',', '' ) )
编辑:
根据评论,我们可以看到,尽管目标字符串中不存在搜索字符串Aziz Shaikh,但仍有可能得到真实结果。
作为替代解决方案,您可以将目标字符串中的搜索字符串替换为空字符串并比较长度。如果原始字符串的长度大于新替换的字符串,那么它是一个找到的真实结果。
示例:
-- this should be greater than 0 for a found true
length( ASSOCIATED_RISK ) > length( replace( ASSOCIATED_RISK, '96,98', '' ) )
这将给出结果。看到不同。
SELECT ASSOCIATED_RISK FROM PROJECT_ISSUES WHERE FIND_IN_SET(ASSOCIATED_RISK,'96,98');