2

以下语句返回我想要完美更改的结果“显示第 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));

但是,当我尝试更新结果集 'post_status' 字段时,以下返回错误“#1292 - 截断不正确的日期时间值:''” ......请问我的第二条语句语法中的错误在哪里(下)?

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));

谢谢。

4

1 回答 1

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)) 

您可以尝试将长文本转换为日期时间:

UPDATE wp_postmeta SET meta_value=STR_TO_DATE(`meta_value`,'%Y-%m-%d %h:%i:%s')
于 2013-09-29T15:59:46.207 回答