2012-07-03 48 views
1

在我的一个严重疏忽,我已经排序所有日期格式为%M %d %Y (July 3 2012)而不是%Y %m %d (2012 07 03)更新WordPress的自定义字段日期格式

我想将自定义字段的所有日期(称为'game_release_date')转换为新格式。

到目前为止我有(但不工作)的代码是:

UPDATE `wp_postmeta` 
SET meta_key = DATE(STR_TO_DATE(game_release_date, '%m %d %Y')) 
WHERE DATE(STR_TO_DATE(game_release_date, '%M %d %Y')); 
+1

您的问题是不明确的。您的日期格式'%B /%e /%Y'没有意义('%B'不是有效的[格式说明符](http://dev.mysql.com/doc/en/date-and-time -functions.html#function_date格式))。此外,你说你想要'%Y%m%d',但是你的SQL中有'%m /%d /%Y',并且你的任何格式都不与你给出的示例日期字符串一致。你究竟想要完成什么? – eggyal

+0

对不起,我不知道这些'/'来自哪里。我从这里取得格式名称(http://en.wikipedia.org/wiki/Date_(Unix)),因为我不知道它们是什么。 基本上我想将自定义字段'release_date'中的所有日期从2012年7月3日的格式转换为2012 07 03. –

+0

因此,请查看您发送给我的链接(即正确的链接)。 我想将%M%d%Y变成&Y%m%d。 –

回答

0

要包含July 03 2012的字符串转换成MySQL的日期,使用MySQL的STR_TO_DATE()功能:

STR_TO_DATE(game_release_date, '%M %d %Y') 

我建议将该函数的结果存储在DATE数据类型的列中。

要转换MySQL的日期到2012 07 03(上述功能,或DATE列的结果是否),使用MySQL的DATE_FORMAT()功能:

DATE_FORMAT(date_value, '%Y %m %d') 

因此,如果你想保持你的日期字符串中的(通常是一个坏主意),但在新的格式:

UPDATE wp_postmeta 
SET game_release_date = DATE_FORMAT(
     STR_TO_DATE(game_release_date, '%M %d %Y'), 
     '%Y %m %d' 
     ) 
WHERE meta_key = ... 
+0

我不确定是否可以将它作为日期存储,因为它是WordPress中的自定义字段,因此存储在“meta_value”列中,并带有相应的“meta_key”。 我假设我会使用“WHERE meta_key = game_release_date”来确保我只会影响这些。 使用建议的代码(与meta_key = game_release_date一起)我得到以下错误:“#1054 - '字段列表'中的未知列'game_release_date'” –

+0

@DavidHoward:哦! 'game_release_date'是你的'meta_key',而不是自定义字段(正如你的问题所建议的)?在这种情况下,你需要用'meta_value'替换上面'game_release_date'的所有引用,然后'WHERE meta_key ='game_release_date''。 – eggyal

+0

称为“game_release_date”的自定义字段将成为meta_key不是吗?我认为它一直如此。然后,自定义字段中的信息将成为meta_value。 –

相关问题