mysql中find_in_set的相反功能

时间:2014-07-10 10:15:39

标签: mysql

SELECT find_in_set("1","1,2,3,4,5"); //return 1

mysql中是否有任何函数可以从像

这样的值集返回非匹配值
SELECT find_in_set("1","1,2,3,4,5"); 
  

预期产量为:2,3,4,5

如果有任何功能,请帮助我。

4 个答案:

答案 0 :(得分:3)

根据我的知识,我不认为mysql中存在任何函数,除了给定的输入之外,它会给你结果。

但是,你可以通过这样做得到你想要的东西..

您可以根据自己的要求进行修改。

SELECT * FROM table_name WHERE NOT find_in_set(“1”,“1,2,3,4,5”);

答案 1 :(得分:0)

您始终可以使用replace()

select replace(concat(',', '1,2,3,4,5', ','), concat(',', '1', ','), '')

这会将分隔符放在两个列表的开头和结尾,因此10不会与100混淆。如果这不是问题,那么您不需要分隔符。

答案 2 :(得分:0)

以下是使用SUBSTRING_INDEX进行操作的方法。

但请确保放置","在值之前和之后,否则它将按不同位置的值分割,即如果查找12,它也会在值为123时分割。

SELECT CONCAT(SUBSTRING_INDEX("11,22,33,44,55", ',22,', 1), ",",  SUBSTRING_INDEX("11,22,33,44,55", ',22,', -1));

如果您对此解决方案没问题,那么您应该创建一个函数,例如。 FIND_NOT_IN_SET并传递两个参数并返回最终字符串。

我还使用预备声明在How to select all the 'not' part against the 'in' set in MySQL?上发布了另一个答案。

答案 3 :(得分:0)

使用一系列UNIONed常量而不是单个值和逗号分隔字段: -

SELECT a.i
FROM
(
    SELECT 1 i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5
) a
LEFT OUTER JOIN 
(
    SELECT 1 i
)
ON a.i = b.i
WHERE b.i IS NULL

或者,如果您只需要1个值: -

SELECT a.i
FROM
(
    SELECT 1 i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5
) a
WHERE a.i != '1'