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
如果有任何功能,请帮助我。
答案 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'