You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 07:12:32