MySQL - 获取前 3 个逗号分隔值

2024-04-16

我有一个查询返回一个带有一组逗号分隔值的字段。我想将这些值中的前三个值放入查询结果中的单独列中。

我可以使用第一个SUBSTRING_INDEX但我怎样才能得到另外两个呢?

SELECT 
  'aaaaa, bbbbb, ccccc',
  SUBSTRING_INDEX('aaaaa, bbbbb, ccccc', ',', 1) AS column_one

编辑 - 哎呀,抱歉忘记提及。我想要拆分的值可以多于(或少于)三个要提取的字符串。

例如,上面的字符串很容易是“aaaaa”或“aaaaa, bbbbb, ccccc, ddddd, eeeee”。

在每种情况下,我只需要前三个(或者无论存在多少)。

任何建议表示赞赏。

Thanks.


你可以使用SUBSTRING_INDEX http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_substring-index两次,第二次带有 -1 参数:

SELECT
  'aaaaa, bbbbb, ccccc',
  SUBSTRING_INDEX('aaaaa, bbbbb, ccccc', ',', 1) AS column_one,
  SUBSTRING_INDEX(SUBSTRING_INDEX('aaaaa, bbbbb, ccccc', ',', 2), ',', -1) AS column_two,
  SUBSTRING_INDEX(SUBSTRING_INDEX('aaaaa, bbbbb, ccccc', ',', 3), ',', -1) AS column_three

如果参数为负数,则返回最终分隔符右侧(从右侧算起)的所有内容。例如。

  • SUBSTRING_INDEX('aaaaa, bbbbb, ccccc', ',', 2)将返回aaaaa, bbbbb
  • SUBSTRING_INDEX(啊啊啊啊啊, ',', -1)然后将返回bbbbb

您可能还想使用 ', ' 作为分隔符,或者TRIM http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_trim结果。

请参阅小提琴here http://sqlfiddle.com/#!2/d41d8/9654.

Edit

如果您想考虑可能少于三个值的字符串,您可以使用如下所示的内容:

SELECT
  s,
  SUBSTRING_INDEX(s, ',', 1) AS column_one,
  CASE WHEN LENGTH(s)-LENGTH(Replace(s, ',', ''))>0
       THEN SUBSTRING_INDEX(SUBSTRING_INDEX(s, ',', 2), ',', -1)
       ELSE NULL END AS column_two,
  CASE WHEN LENGTH(s)-LENGTH(Replace(s, ',', ''))>1
       THEN SUBSTRING_INDEX(SUBSTRING_INDEX(s, ',', 3), ',', -1)
       ELSE NULL END AS column_three
FROM
  strings

请参阅小提琴here http://sqlfiddle.com/#!2/5e054/1.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL - 获取前 3 个逗号分隔值 的相关文章

随机推荐