跨多个列拆分字符串的元素

时间:2011-09-28 21:10:00

标签: mysql

我想将包含带有文章引用的字符串的列拆分为MySQL中的多个列。例如,以下字符串

North American Birds 53(1) 1999: 27-29

将分为“北美鸟类”,分别为53,1,1999,27-19。我知道我可以用substring_index做一些,但这不适用于从卷(53)中分割期刊名称(北美鸟类)。知道我该怎么做吗?

2 个答案:

答案 0 :(得分:1)

您可以将该号码用作分隔符。

缓慢而丑陋的代码,但我猜它有效

SELECT 
  s.id
  ,SUBSTRING(s.title,1, PosOfFirstNumber-1) as booktitle
  ,SUBSTRING(s.title, PosOfFirstNumber) as Remainder
FROM 
  (SELECT
      id
      ,title
      ,LEAST(
          IFNULL(NULLIF(LOCATE('1',title),0),999)
          ,IFNULL(NULLIF(LOCATE('2',title),0),999)
          ,IFNULL(NULLIF(LOCATE('3',title),0),999)
          ,IFNULL(NULLIF(LOCATE('4',title),0),999)
          ,IFNULL(NULLIF(LOCATE('5',title),0),999)
          ,IFNULL(NULLIF(LOCATE('6',title),0),999)
          ,IFNULL(NULLIF(LOCATE('7',title),0),999)
          ,IFNULL(NULLIF(LOCATE('8',title),0),999)
          ,IFNULL(NULLIF(LOCATE('9',title),0),999)
          ,IFNULL(NULLIF(LOCATE('0',title),0),999)
        )) as PosOfFirstNumber
    FROM table1 ) s

答案 1 :(得分:0)

首先要问的问题是,您是否计划在将字符串插入数据库之后将字符串拆分为不同的列?我建议在插入之前拆分,但这个建议可能为时已晚。

如果在插入之前拆分,则应使用正则表达式来解析数据,然后构建相应的SQL INSERT。这是一个Java regular expressions example

如果在数据已经存在于数据库之后拆分数据,则需要创建一个具有特定于数据字符串的模式匹配的SQL。这是一个IBM article describing different SQL code strategies