以下语句返回我想要完美更改的结果“显示行0 - 29(总计2,018,查询占用0.0781秒)”:
SELECT * FROM `wp_posts` WHERE `ID` IN
(SELECT `post_id` FROM `wp_postmeta` WHERE (`meta_key` = 'expires') AND (`meta_value` <= NOW() - INTERVAL 1 DAY) AND (`meta_value` IS NOT NULL));
但是下面返回错误“#1292 - 截断错误的日期时间值:''”,当我尝试更新结果集'post_status'字段时......我的错误在哪里第二语句语法请(下)?
UPDATE `wp_posts` SET `post_status`='draft' WHERE `ID` IN
(SELECT `post_id` FROM `wp_postmeta` WHERE (`meta_key` = 'expires') AND (`meta_value` <= NOW() - INTERVAL 1 DAY) AND (`meta_value` IS NOT NULL));
感谢。
答案 0 :(得分:0)
试试这个:
UPDATE `wp_posts`
SET `post_status` = 'draft'
WHERE `id` IN (SELECT `post_id`
FROM `wp_postmeta`
WHERE ( `meta_key` = 'expires' )
AND ( Str_to_date(`meta_value`, '%Y-%m-%d %h:%i:%s') <=
Now()
- INTERVAL 1 day
)
AND ( `meta_value` IS NOT NULL ));
或使用加入
UPDATE a SET a.post_status='draft' FROM `wp_posts` a
INNER JOIN `wp_postmeta` b ON a.ID=b.post_id
WHERE `meta_key` = 'expires'
AND (`meta_value` <= NOW() - INTERVAL 1 DAY)
AND (`meta_value` IS NOT NULL))
您可以尝试将longtext转换为datetime:
UPDATE wp_postmeta SET meta_value=STR_TO_DATE(`meta_value`,'%Y-%m-%d %h:%i:%s')