跨多列拆分字符串的元素
问题描述:
我想将包含带有文章引用的字符串的列拆分成多个列。例如,以下字符串跨多列拆分字符串的元素
North American Birds 53(1) 1999: 27-29
将被拆分为'北美洲鸟类',53,1,1999,27-19。我知道我可以用substring_index做一些这样的事情,但是这对于从卷(53)中拆分日记名称(北美鸟类)不起作用。任何想法我可以做到这一点?
答
您可以使用该号码作为分隔符。
缓慢而丑陋的代码,但我想它的工作原理
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
答
首先要问的是,你打算前或插入到你的数据库后,您的字符串分割成不同的列?我建议在插入之前进行分割,但这个建议可能为时已晚。
如果拆分插入之前,您应该使用正则表达式来分析数据,然后建立相应的SQL INSERT。这是Java regular expressions example。
如果分割数据它已经在你的数据库后,您将需要创建模式匹配特定字符串的数据的SQL。这是一个IBM article describing different SQL code strategies。
+0
的数据已经到数据库中,所以我会考虑第二个选项。这个链接看起来很有趣。谢谢。 – Guillaume
正如你所说,这不是很漂亮,但它的工作原理!谢谢! – Guillaume