【问题标题】:Convert VARCHAR timestamp to TIMESTAMP?将 VARCHAR 时间戳转换为 TIMESTAMP?
【发布时间】:2012-10-07 15:26:15
【问题描述】:

我在 MySQL 数据库中有一个格式为“17:16:28 Sep 13, 2011 PDT”的时间戳。数据库中字段的类型是 VARCHAR。我想将此 VARCHAR 转换为 MySQL 中 TIMESTAMP 类型的字段。

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

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

【问题讨论】:

  • STR_TO_DATE(),如果这就是你的意思,它为你所有的几乎提供格式说明符。我能发现的唯一例外是时区。你们有很多不同的时区吗?

标签: mysql datetime time timestamp


【解决方案1】:

您可以通过在 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;

【讨论】:

  • 查看我对其他答案的评论。
  • 用查询更新了答案。另见stackoverflow.com/questions/2523286/mysql-convert-tz
  • 非常感谢,Omesh。这非常有效。我发现我的数据库中只有两个时区,每个时区我执行update tablename set newdate=STR_TO_DATE(olddate, '%H:%i:%s %b %d, %Y PDT') where olddate like '%PDT%'(第二次将 PDT 更改为 PST)并得到了我想要的。
【解决方案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..等。但是1、2、3只有一位时,把%d改成%e

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

【讨论】:

  • 我注意到每个人总是想出完全相同的例子,包含“17:16:28 Sep 13, 2011 PDT”。这不是我要找的。我不想转换字符串。我想转换一个 SQL 字段。另外,有什么 convert_tz() 的例子吗?
  • 我想这是因为该示例取自您的问题:) 另外@Omesh 已经回答了有关如何转换字段的另一部分。更具体地说,将 varchar 值转换为另一个字段,这是 IMO 的好方法。
  • 啊哈...您对日期本身的看法是正确的,但我的意思是,无论我在 stackoverflow.com 上查看什么地方,人们都倾向于使用字符串而不是字段引用,这真的让我感到惊讶,因为MySQL 通常是关于如何从字段而不是字符串中读取和处理数据。另外,我不明白你为什么添加 unix_timestamp 函数。这真的是不必要的。
  • 你是对的。 MySQL 实际上是关于字段而不是字符串。我想用字符串在一行中显示示例比解释表中的数据类型并在示例查询中使用它的字段更容易。您对 unix_timestamp 是正确的,没有必要。你要一个时间戳,所以它在我的脑海里是有道理的,但当我读回来的时候就没那么多了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 2021-07-02
  • 2018-10-19
  • 2021-10-02
  • 1970-01-01
相关资源
最近更新 更多