由“,”拆分的SQL值

时间:2013-11-26 23:53:29

标签: mysql split

我有一个mysql数据库,其中的字段可以包含由“,”(逗号)

分隔的更多值

当我提取它们时,我需要单独使用它们。

例如,在db的字段中,值为:1,2,3。 我需要他们这样:1然后2然后3

有人可以帮助我吗?

2 个答案:

答案 0 :(得分: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 :(得分: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 ...