Mysql SQL查询-替换/移动部分内容
我需要在MySQL中更新大约2000条记录 我从表“my_table”中有一列“my_content”,其值如下Mysql SQL查询-替换/移动部分内容,mysql,sql,database,Mysql,Sql,Database,我需要在MySQL中更新大约2000条记录 我从表“my_table”中有一列“my_content”,其值如下 Title: some title here<br />Author: John Smith<br />Size: 2MB<br /> “我的作者” John Smith “我的尺码” 2MB 可以想象,每行的标题、作者和大小总是不同的 我的想法是查询以下内容,但我不擅长SQL查询,也不确定实际查询是什么样子 这就是我想做的: Within
Title: some title here<br />Author: John Smith<br />Size: 2MB<br />
“我的作者”
John Smith
“我的尺码”
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'
在“我的内容”中找到所有以“标题:…”开头,以“…
au”结尾的内容,并将其移动到“我的标题”
在“我的内容”中找到所有以“thor:…”开头,以“…
s”结尾的内容,并将其移动到“我的作者”
在“我的内容”中,找到所有以“ize:…”开头,以“…
”结尾的内容,并将其移动到“我的大小”
我只是不知道如何编写查询来实现这一点
一旦所有内容都在新列中,我就可以找到并删除不再需要的内容,例如“thor:”等。您可以使用
INSTR
查找分隔符的索引,并使用子字符串
选择所需的部分。例如,作者可能是
SUBSTR(my_content,
INSTR(my_content, "Author: ") + 8,
INSTR(my_content, "Size: ") - INSTR(my_content, "Author: ") - 8)
您需要做更多的工作来修剪
和任何周围的空白。请尝试以下操作:
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;
选择子字符串(子字符串_索引(mycontent,
',1),定位('Title:',mycontent)+7)作为mytitle,
SUBSTRING(SUBSTRING_INDEX(mycontent,
',2),将('Author:',mycontent)+8)定位为myauthor,
子字符串(子字符串索引(mycontent,
',3),将('Size:',mycontent)+6)定位为mysize
从mytable;
Hey Sel,谢谢您的回复。我刚刚意识到,实际上还有更多的内容,而不仅仅是移动内容。我应该告诉你这是一个Wordpress数据库。表名几乎是wp_posteta,列(mytitle、mysize和myauthor)都是与帖子相关的元盒内容。因此,每篇文章都有一个自定义的mycontent元框,我需要将其分为mytitle、mysize和myauthor。您的意思是想用字符串的提取更新列(mytitle、mysize和myauthor)?如果是这种情况,您可以使用updatemytable set mytitle=SUBSTRING(SUBSTRING_INDEX(mycontent,
',1),LOCATE('Title:',mycontent)+7)
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;