MYSQL 5.6:选择CSV列中的值

时间:2015-10-29 15:29:37

标签: mysql sql

我有一个像这样的数据库(Mysql 5.6):

id | value
--------------------------
1  | "value1;value2;value3"
2  | "value4;value5;value6"

我想发出如下请求:

SELECT id FROM table WHERE 'value5' IS IN value
return --> 2

SQLFiddle:http://sqlfiddle.com/#!9/b5c347

我无法更改数据库架构

2 个答案:

答案 0 :(得分:1)

如果所有值都不同,您可以使用LIKE:

SELECT id FROM table WHERE value LIKE '%value5%';

请记住,如果你有一些包含另一个的值,它就不会起作用,比如

value2;value3;value56

或使用RegExp,如下所示:

SELECT id FROM table WHERE value REGEXP '(^|[^a-z0-9])value5([^a-z0-9]|$)'

答案 1 :(得分:1)

Use LIKE syntax, but use it like this:

SELECT id
FROM table
WHERE
    value LIKE 'value5;%' OR
    value LIKE '%;value5' OR
    value LIKE '%;value5;%' OR
    value LIKE 'value5';

This is a dirty solution, and not possible to index, but should fit your needs (On a smallish table in a reasonable amount of time)

Another solution (If you're sure your values don't contain commas):

SELECT id
FROM table
WHERE
    FIND_IN_SET('value5', REPLACE(value, ';', ',')