【问题标题】:Converting String to Date is off by a Day将字符串转换为日期已关闭一天
【发布时间】:2019-12-17 11:12:54
【问题描述】:

当我尝试在 MYSQL 中将字符串转换为日期时,我得到了奇怪的结果。

SELECT 
    '2017-06-20' d
    ,CAST('2017-06-20' as DATE) d1
    ,DATE_FORMAT('2017-06-20', '%Y-%m%-%d') d2 
    ,STR_TO_DATE('2017-06-20', '%Y-%m-%d') d3
    ,DATE('2017-06-20') d4

在我的机器上,d2 是唯一正确的日期,即它生成2017-06-20。其余的,即 d1、d3 和 d4,生成06/19/2017。为什么?我对STR_TO_DATE特别困惑

【问题讨论】:

  • 抱歉,我无法重现此发现。
  • 可能的重复/解释...stackoverflow.com/questions/40774904/…
  • 什么版本的mysql,你的时区设置是什么? SHOW VARIABLES LIKE '%zone';
  • MY SQL 版本:5.7.12
  • 系统时区:UTC

标签: mysql sql date


【解决方案1】:

您对数据类型感到困惑。 MySQL 具有内置的数据类型。它将'YYYY-MM-DD' 识别为字符串。

当表达式的结果为字符串时,按原样放入结果集中。

如果结果是日期/时间,则根据您的本地设置显示。

因此,DATE_FORMAT() 将第一个参数解释为日期并将其转换为字符串。这就是你得到的。

另一方面,STR_TO_DATE() 顾名思义。它将第一个参数(字符串)转换为日期。然后根据您的本地设置显示。

【讨论】:

    猜你喜欢
    • 2020-05-24
    • 2023-03-11
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 2019-10-03
    • 1970-01-01
    相关资源
    最近更新 更多