【问题标题】:Null Values Using STR_TO_DATE() MySQL使用 STR_TO_DATE() MySQL 的空值
【发布时间】:2017-01-02 10:24:44
【问题描述】:

无论出于何种原因,某些日期在使用 STR_TO_DATE() 时会返回 null,而其他日期则不会。

CREATE TABLE persons (
personid int,
name varchar(100),
dob date;

insert into persons values 
(5,"Gov","1985-04-23"),
(1,"Gov","1993-04-23"), 
(2,"Sam","1991-11-19"),
(3,"A","1993-04-23"),
(4,"B","1991-11-19");

SELECT STR_TO_DATE( CONCAT(  MONTH(DOB), DAY(DOB), YEAR(CURDATE()) ), '%m %d %Y') FROM persons;

返回

STR_TO_DATE( CONCAT( MONTH(DOB), DAY(DOB), YEAR(CURDATE()) ), '%m %d %Y')
--------------------------------------------------------------------------
(null)
November, 19 2016 00:00:00
(null)
November, 19 2016 00:00:00
(null)

请看小提琴: http://sqlfiddle.com/#!9/a98eef/1/0

【问题讨论】:

  • 我更想知道它是否适用于没有零填充值的日期。顺便说一句:dob + INTERVAL (YEAR(CURDATE()) - YEAR(dob)) YEAR 也在做同样的事情(2 月 29 日除外)。

标签: mysql str-to-date


【解决方案1】:

您的格式字符串显示月份和日期后有一个空格。但是当你连接它们时,你并没有放入任何空格。使用CONCAT_WS 指定要连接的项目之间的分隔符。

STR_TO_DATE( CONCAT_WS(' ', MONTH(DOB), DAY(DOB), YEAR(CURDATE()) ), '%m %d %Y')

corrected fiddle

【讨论】:

    猜你喜欢
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多