MySQL - 更新字段语句查询/错误

时间:2013-09-29 15:45:10

标签: mysql syntax-error where-clause

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

感谢。

1 个答案:

答案 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')