2013-11-26 1 views
-5

У меня есть базы данных MySQL, который имеет поля, которые могут содержать несколько значений, разделенных «» (запятая)SQL Значения расщепляется «»

Когда я достаю их, мне нужно их отдельно.

Например, в поле db значения равны: 1,2,3. Мне нужны они вот так: 1 затем 2 затем 3

Может кто-нибудь мне помочь?

+1

Что значит «вам нужны?»? Можете ли вы рассказать нам, что вы делаете, как должны выполняться запросы и как их потреблять. Пожалуйста, помните, что мы ничего не знаем о вашей системе. –

+1

Вы хотите, чтобы они были отдельными столбцами в результирующем наборе или в виде отдельных строк в результирующем наборе? –

+0

Мне нужны они в виде отдельных строк. – marius

ответ

0

с использованием определенной функции здесь: http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/ , если вы знаете, что ваши данные имеют максимум 3 значений, как 1,2,3, вы можете попробовать это sqlFiddle example

SELECT value 
FROM 
    (
    SELECT SPLIT_STR(value,',',1) AS value FROM t 
    UNION ALL 
    SELECT SPLIT_STR(value,',',2) AS value FROM t 
    UNION ALL 
    SELECT SPLIT_STR(value,',',3) AS value FROM t 
)T1 
WHERE value <> ''; 

, если вы знаете, что ваши данные имеют максимум 5 значений, таких как 1,2,3,4,5, вы можете просто добавить еще 2 UNION ALL ...

+0

и посмотреть этот ответ http://stackoverflow.com/questions/17308669/reverse-group- concat-in-mysql, вы можете использовать эту хранимую процедуру. –

0

MySql не предоставляет никаких функций разделения строк (что я знаю). Как правило, лучше хранить этот тип данных в разных столбцах.

Но если у вас нет возможности хранить его по-другому, вы можете быть в состоянии достичь определенных результатов с помощью функции SUBSTRING_INDEX ..

SELECT `value` , 
SUBSTRING_INDEX(`value` , ',', 1) AS a, 
SUBSTRING_INDEX(SUBSTRING_INDEX(`value` , ',', 2),',',-1) AS b, 
SUBSTRING_INDEX(SUBSTRING_INDEX(`value` , ',', -2),',',1) AS c, 
SUBSTRING_INDEX(`value` , ',', -1) AS d 
FROM (SELECT "1,2,3,4" AS `value`) AS t; 

Это дает следующий результат в виде строки: ' 1,2,3,4' , '1', '2', '3', '4'

Смотрите комментарии, расположенные здесь: http://dev.mysql.com/doc/refman/5.1/en/string-functions.html

насколько разделив его на отдельные строки, я Я не знаю, как бы ты это сделал. Если можно нормализовать структуру db, которая может быть лучше.

+1

, чтобы иметь их в разных строках, вы можете попробовать использовать кучу 'UNION' –

Смежные вопросы