WooCommerce中MySQL跨表更新日期格式转换实现咨询
解决方案:用MySQL直接完成日期格式转换与字段更新
完全不需要借助PHP脚本,MySQL自带的日期函数就能搞定格式转换,同时修正你原SQL里的别名错误。
修正后的基础更新语句(日期替换为YYYY-MM-DD 00:00:00)
原SQL里的wp_posts ASp是别名书写错误,应该改为wp_posts AS p,再用STR_TO_DATE函数将_date字段的YYYYMMDD格式转换为post_date_gmt要求的DATETIME格式:
UPDATE wp_posts AS p INNER JOIN wp_postmeta AS pm ON pm.post_id = p.ID SET p.post_date_gmt = STR_TO_DATE(pm.meta_value, '%Y%m%d') WHERE p.post_type = 'product' AND p.post_status = 'publish' AND pm.meta_value IS NOT NULL AND pm.meta_value != '' -- 避免空字符串导致转换失败 AND pm.meta_key = '_date'
STR_TO_DATE(pm.meta_value, '%Y%m%d')会自动把20230711转换成2023-07-11 00:00:00,完全匹配post_date_gmt的字段格式。
保留原时间部分的更新语句
如果需要保留post_date_gmt原有的时间(只替换日期部分),可以用CONCAT拼接转换后的日期和原时间:
UPDATE wp_posts AS p INNER JOIN wp_postmeta AS pm ON pm.post_id = p.ID SET p.post_date_gmt = CONCAT(STR_TO_DATE(pm.meta_value, '%Y%m%d'), ' ', TIME(p.post_date_gmt)) WHERE p.post_type = 'product' AND p.post_status = 'publish' AND pm.meta_value IS NOT NULL AND pm.meta_value != '' AND pm.meta_key = '_date'
比如原post_date_gmt是2023-07-11 15:50:56,_date值为20230801,执行后会变成2023-08-01 15:50:56。
执行前验证
为了避免意外,建议先运行SELECT语句确认转换结果是否符合预期:
SELECT p.ID, p.post_date_gmt, pm.meta_value, STR_TO_DATE(pm.meta_value, '%Y%m%d') AS converted_date FROM wp_posts AS p INNER JOIN wp_postmeta AS pm ON pm.post_id = p.ID WHERE p.post_type = 'product' AND p.post_status = 'publish' AND pm.meta_value IS NOT NULL AND pm.meta_value != '' AND pm.meta_key = '_date'
注意:执行UPDATE操作前务必备份数据库,防止数据丢失。
内容的提问来源于stack exchange,提问作者Anatole
相关产品推荐
相关产品推荐

