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

Mysql 跨多个列拆分字符串的元素,mysql,Mysql,我想在MySQL中将包含有文章引用的字符串的列拆分为多个列。例如,以下字符串 North American Birds 53(1) 1999: 27-29 将被分为“北美鸟类”,53,1,1999,27-19。我知道我可以用substring_index做一些这方面的工作,但这对于将期刊名称(北美鸟类)从卷(53)中拆分是行不通的。知道我该怎么做吗?要问的第一个问题是,您计划在将字符串插入数据库之前还是之后将其拆分为不同的列?我建议在插入之前拆分,但这个建议可能太晚了 如果在插入之前进行拆分,

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

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

将被分为“北美鸟类”,53,1,1999,27-19。我知道我可以用substring_index做一些这方面的工作,但这对于将期刊名称(北美鸟类)从卷(53)中拆分是行不通的。知道我该怎么做吗?

要问的第一个问题是,您计划在将字符串插入数据库之前还是之后将其拆分为不同的列?我建议在插入之前拆分,但这个建议可能太晚了

如果在插入之前进行拆分,则应使用正则表达式解析数据,然后构建适当的SQL插入。这是一个例子


如果在数据已经存在于数据库中之后对其进行拆分,则需要创建一个SQL,该SQL具有特定于数据字符串的模式匹配。这是一个。

您可以使用该数字作为分隔符

代码又慢又难看,但我想它能工作

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

数据已经进入数据库,因此我将研究第二个选项。这个链接似乎很有趣。谢谢