我想在MySQL中将包含带有文章引用的字符串的列拆分为多个列。例如,以下字符串
North American Birds 53(1) 1999: 27-29将被分成“北美鸟类”,53,1,1999,27-19。我知道我可以用substring_index做一些这样的事情,但这不能用于将期刊名称(北美鸟类)从卷(53)中分离出来。你知道我该怎么做吗?
发布于 2011-09-29 06:28:13
您可以使用数字作为分隔符。
缓慢而丑陋的代码,但我猜它可以工作
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发布于 2011-09-29 06:02:50
要问的第一个问题是,您是否计划在将字符串插入数据库之前或之后将其拆分到不同的列中?我建议在插入之前拆分,但这个建议可能太晚了。
如果在插入之前拆分,则应使用正则表达式来解析数据,然后构建适当的SQL插入。这是一个Java regular expressions example。
如果在数据已在数据库中之后拆分数据,则需要创建一个SQL,该SQL具有特定于数据字符串的模式匹配。这是一个IBM article describing different SQL code strategies。
https://stackoverflow.com/questions/7589632
复制相似问题