【问题标题】:Convert CHAR to date in mysql在mysql中将CHAR转换为日期
【发布时间】:2018-09-14 05:09:36
【问题描述】:

我正在尝试将存储为 CHAR(4) 的年份与存储为 DATETIME 的年份进行比较,但每次我尝试将 CHAR 年份转换为日期时,当我期望年份格式为 'YYYY 时,我总是得到 NULL '。我已经阅读了使用 str_to_date 的格式,但我不确定为什么它总是显示为空(也许我读错了一些东西)。 str_to_date 函数中的字符串/格式必须是完整日期而不是年份格式吗?

SELECT id, STR_TO_DATE(year, '%Y') AS Year
FROM elite_years
LIMIT 100;

elite_years 表中的大多数(如果不是全部)数据是一个四字符年份(例如“2008”)。我也无法修改表中的数据类型。 我正在使用 Yelp 数据集,仅供参考。

我查看了this post,但据我所知,我遵循了基于the docs 的正确格式。

【问题讨论】:

  • 反其道而行之?将 char 转换为 int 并与 YEAR(dt_fld) 进行比较
  • 谢谢,这行得通,但是您知道为什么我以前的方法行不通吗?
  • 我怀疑%Y周围的那些反引号
  • 我用 ' 、 ` 和 " 尝试过。只有反引号返回错误,其他两个返回 NULL。我在这里输入错误,我的代码中只有一个引号

标签: mysql str-to-date


【解决方案1】:

要使用STR_TO_DATE() 解析字符串,字符串中需要有足够的信息来唯一标识日期。仅仅一年是不够的——你还需要一个月和一天,以某种形式。

在您尝试时收到的警告中暗示了这一点:

mysql> SELECT STR_TO_DATE('2009', '%Y') \G
*************************** 1. row ***************************
str_to_date('2009', '%Y'): NULL
1 row in set, 1 warning (0.00 sec)

mysql> SHOW WARNINGS \G
*************************** 1. row ***************************
  Level: Warning
   Code: 1411
Message: Incorrect datetime value: '2009' for function str_to_date
1 row in set (0.00 sec)

【讨论】:

    猜你喜欢
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多