我想将包含带有文章引用的字符串的列拆分为MySQL中的多个列。例如,以下字符串
North American Birds 53(1) 1999: 27-29
将分为“北美鸟类”,分别为53,1,1999,27-19。我知道我可以用substring_index做一些,但这不适用于从卷(53)中分割期刊名称(北美鸟类)。知道我该怎么做吗?
答案 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。