MySQL 如果目标字段为空,则在字段之间复制一个字符串
Posted
技术标签:
【中文标题】MySQL 如果目标字段为空,则在字段之间复制一个字符串【英文标题】:MySQL Copy a string between fields if the target field is empty 【发布时间】:2020-11-22 12:44:47 【问题描述】:我正在使用 WordPress 数据库,其中一些 post_title
字段为空。我需要用字段post_content
中的字符串填充这些内容。该字符串位于两个标签之间:<strong>Text string</strong>
。
我可以使用以下方法成功找到并复制字符串:
UPDATE `wp_posts`
SET `post_title` = SUBSTRING_INDEX(SUBSTRING_INDEX(`post_content`, '<strong>', -1), '</strong>', 1)
FROM `wp_posts`
WHERE `post_title` = ''
但是,WHERE post_title = ''
不起作用。这会覆盖所有 post_title
字段,而不仅仅是空字段。
我可以使用以下方法选择空的 post_title
字段:
SELECT `post_title` FROM `wp_posts` WHERE `post_title` = ''
但我不确定如何将这两个操作结合起来——或者这是否是解决问题的正确方法。
【问题讨论】:
【参考方案1】:您的代码不是有效的 mysql 语法,应该会出错。 MySQL 不希望在 update
语句中出现 from
子句,所以应该是:
update `wp_posts`
set `post_title` = substring_index(substring_index(`post_content`, '<strong>', -1), '</strong>', 1)
where `post_title` = ''
旁注:您可能还想检查post_title
是否为null
(与空字符串不同):
where `post_title` = '' or `post_title` is null
【讨论】:
【参考方案2】:WHERE post_title = '' 不起作用。这会覆盖所有 post_title 字段,而不仅仅是空字段。
这根本不是真的。但是,您的查询不是有效的 MySQL 语法。正确的查询是:
UPDATE `wp_posts`
SET `post_title` = SUBSTRING_INDEX(SUBSTRING_INDEX(`post_content`, '<strong>', -1), '</strong>', 1)
WHERE `post_title` = '';
MySQL 不支持UPDATE
中的FROM
子句。也许执行的只是查询的前两行。
【讨论】:
【参考方案3】:您的代码无效,必须检查 NULL 值
UPDATE `wp_posts`
SET `post_title` = SUBSTRING_INDEX(SUBSTRING_INDEX(`post_content`, '<strong>', -1), '</strong>', 1)
WHERE `post_title` IS NULL
【讨论】:
以上是关于MySQL 如果目标字段为空,则在字段之间复制一个字符串的主要内容,如果未能解决你的问题,请参考以下文章
如果存在,则在 mongodb 中增加嵌套字段值或创建嵌套字段