2016-08-25 52 views
1

無論出於何種原因,某些日期在使用STR_TO_DATE()時會返回null,而其他日期則不會。使用STR_TO_DATE()的空值MySQL

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

+0

我想知道更多,它的作品的日期沒有零填充值。順便說一句:'dob + INTERVAL(YEAR(CURDATE()) - YEAR(dob))YEAR'也是一樣的(2月29日除外)。 –

回答

0

你的格式字符串說,有月份和日期之後的空間。但是當你連接它們時,你並沒有放任何空格。使用CONCAT_WS指定要連接的項目之間的分隔符。

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

corrected fiddle