SQL查询 - 替换/移动内容的某些部分

时间:2012-06-20 00:48:25

标签: mysql sql database

我需要在MySQL中更新大约2000条记录

我在表'my_table'中有一个'my_content'列,其中包含以下值

Title: some title here<br />Author: John Smith<br />Size: 2MB<br />

我创建了3个新列(my_title,my_author和my_size),现在我需要像这样分离'my_content'的内容

'my_title'

some title here

'my_author'

John Smith

'my_size'

2MB

你可以想象每一行的标题,作者和大小总是不同的。

我在想的是查询以下内容,但我对SQL查询并不擅长,而且我不确定实际查询会是什么样子。

这就是我要做的事情:

Within 'my_content' find everything that starts with "title:..." and ends with "...<br />au" and move it to 'my_title'
Within 'my_content' find everything that starts with "thor:..." and ends with "...<br />s" and move it to 'my_author'
Within 'my_content' find everything that starts with "ize:..." and ends with "...<br />" and move it to 'my_size'

我只是不知道如何编写查询来执行此操作。

一旦所有内容都在新列中,我就可以找到并删除不再需要的内容,例如'thor:'等。

2 个答案:

答案 0 :(得分:0)

您可以使用INSTR查找分隔符的索引,并使用SUBSTRING选择所需的部分。所以,例如,作者将是

SUBSTR(my_content,
       INSTR(my_content, "Author: ") + 8,
       INSTR(my_content, "Size: ") - INSTR(my_content, "Author: ") - 8)

你需要做更多的工作来修剪<br/>和任何周围的空白。

答案 1 :(得分:0)

请尝试以下方法:

SELECT SUBSTRING(SUBSTRING_INDEX(mycontent,'<br />',1),LOCATE('Title: ',mycontent)+7) as mytitle, 
SUBSTRING(SUBSTRING_INDEX(mycontent,'<br />',2),LOCATE('Author: ',mycontent)+8) as myauthor, 
SUBSTRING(SUBSTRING_INDEX(mycontent,'<br />',3),LOCATE('Size: ',mycontent)+6) as mysize 
FROM mytable;