Дата по определению содержит год, поэтому STR_TO_DATE
вернет NULL
, поскольку не может вернуть дату. Вы можете сравнить STR_TO_DATE("2020-4-20", '%Y-%m-%d' )
с STR_TO_DATE("4-20", '%m-%d' )
. Первый работает, возвращая 2020-04-20
, в то время как второй возвращает NULL
.
Если ваша цель здесь состоит в том, чтобы набрать 0 и день и месяц, взгляните на LPAD
SELECT CONCAT( LPAD(MONTH(NOW()), 2, 0), "-", LPAD(DAY(NOW()), 2, 0) )
+-----------------------------------------------------------------+
| CONCAT( LPAD(MONTH(NOW()), 2, 0), "-", LPAD(DAY(NOW()), 2, 0) ) |
+-----------------------------------------------------------------+
| 04-29 |
+-----------------------------------------------------------------+
РЕДАКТИРОВАТЬ Я думаю, что вы ищете в ответ от @nbk; DATE_FORMAT
.
SELECT DATE_FORMAT(NOW(), "%m-%d" )
+------------------------------+
| DATE_FORMAT(NOW(), "%m-%d" ) |
+------------------------------+
| 04-29 |
+------------------------------+