2016-08-25 3 views
1

По какой-то причине некоторые даты возвращают null при использовании 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

Интересно еще, что он работает для дат без нулевого заполненных значений. BTW: 'dob + INTERVAL (YUAR (CURDATE()) - YEAR (dob)) YEAR' делает то же самое (кроме 29 февраля). –

ответ

0

Ваша строка формата говорит, что есть пробел после месяца и дня. Но вы не помещаете какие-либо пробелы, когда их объединяете. Используйте CONCAT_WS, чтобы указать разделитель между конкатенированными элементами.

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

corrected fiddle

Смежные вопросы