2012-10-17 57 views
7

我在MySQL数据库中有一个时间戳“2011年9月13日17:16:28 PDT”。数据库中字段的类型是VARCHAR。我想将这个VARCHAR转换为MySQL中的TIMESTAMP类型的字段。将VARCHAR时间戳转换为TIMESTAMP?

我尝试了几个solutions suggested elsewhere on this site,比如使用string_to_time函数,但是这些解决方案都是从不同类型的时间戳开始的。

如何将上述VARCHAR时间戳转换为MySQL认可的TIMESTAMP,以便我可以按日期对数据进行排序?

+0

[STR_TO_DATE()](http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date),如果这就是你的意思, *提供几乎*所有的格式说明符。我能看到的唯一例外是时区。你有很多不同的时区吗? –

回答

7

您可以在MySQL中使用STR_TO_DATE功能做到这一点,试试这个:

SELECT STR_TO_DATE("17:16:28 Sep 13, 2011 PDT", '%H:%i:%s %b %d, %Y PDT'); 

编辑:

SELECT STR_TO_DATE(field_name, '%H:%i:%s %b %d, %Y PDT') AS new_time 
FROM table_name; 
+0

请参阅我对其他答案的评论。 – Mark

+0

用查询更新答案。另见http://stackoverflow.com/questions/2523286/mysql-convert-tz – Omesh

+1

非常感谢,Omesh。这工作完美。我发现我的数据库中只有两个时区,每个时区我执行'update tablename set newdate = STR_TO_DATE(olddate,'%H:%i:%s%b%d,%Y PDT'),其中olddate比如'%PDT%'(第二次将PDT改为PST)并得到我想要的。 – Mark

2

使用STR_TO_DATE与格式:

select unix_timestamp(str_to_date("17:16:28 Sep 13, 2011 PDT","%T %b %d, %Y PDT")); 

如果日部分(例如:13)不表示为01,02 ..等等。但是当它只有一个数字时,请将%d更改为%e

请小心,因为时区不会被识别,它只是格式化的字符串文字!如果你对不同的记录有不同的时区,你应该使用convert_tz()函数来获得正确的时间戳。

+0

我注意到,每个人总是拿出完全相同的例子,包含“2011年9月13日17:16:28 PDT”。这不是我要找的。我不想转换一个字符串。我想转换一个SQL字段。另外,得到convert_tz()的任何例子? – Mark

+0

我想这是因为这个例子取自你的问题:) 另外@Omesh已经回答了关于如何转换字段的其他部分。更具体地说,将varchar值转换为另一个字段,这是IMO的一个好方法。 – Andrew

+0

阿哈......你说的对日期本身是对的,但我的意思是,无论我看到的是什么,在我看来,stackoverflow.com人们倾向于使用字符串而不是字段引用,这真的让我感到意外,因为MySQL通常是关于如何阅读并从字段而不是字符串处理数据。 另外,我不明白你为什么添加了unix_timestamp函数。这真是不必要的。 – Mark