0

以下查询

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
4

3 回答 3

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',所以它失败了。

于 2014-02-19T11:50:30.393 回答
1

你的评论:

有没有其他方法可以在单个查询中获取它,而不是构建多个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', '' ) )
于 2014-02-19T12:12:23.157 回答
0

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

SELECT ASSOCIATED_RISK FROM PROJECT_ISSUES WHERE FIND_IN_SET(ASSOCIATED_RISK,'96,98');
于 2014-02-19T11:47:04.953 回答