Причина для получения NULL
лежит в определении STR_TO_DATE
:
Если дата, время или значение даты и времени извлекается из ул является незаконным, STR_TO_DATE() возвращает значение NULL и выдает предупреждение. Сервер сканирует str, пытаясь сопоставить с ним формат.
Учитывая, что определенно, ясно, что тот же самый period
-строка как вход не может соответствовать двум различным форматам; следовательно, один из двух STR_TO_DATE
-цветов будет давать недопустимую дату, то есть NULL
.
Я полагаю, однако, что period
на самом деле является DATE
(или DATETIME
) тип данных, и вы имеете в виду DATE_FORMAT
, не STR_TO_DATE
, верно? Предполагая это, следующий запрос должен работать:
select DATE_FORMAT(period, '%Y-%m-%d') as period1,DATE_FORMAT(period, '%Y%m%d') as period2 from test
При использовании этой схемы ...
create table test (
period date
);
insert into test (period) values ("2016-12-01");
это дает следующий результат:
period1 | period2
2016-12-01 | 20161201
вы не дают достаточно информации. Если вы беспокоитесь об уязвимости, используйте параметризованный запрос. Покажите нам пример данных и ожидаемый результат. \t Пожалуйста, прочитайте [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t И вот отличное место для [** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/), чтобы узнать, как улучшить качество вопроса и получить лучшие ответы. –