Mysql STR_TO_TIME форматирование - PullRequest
0 голосов
/ 29 апреля 2020

Мой запрос выглядит так:

select STR_TO_DATE( CONCAT(MONTH(date), '-', DAY(date) ), '%M-%d' ) from `subscriptions` 

Но конечным результатом всегда являются записи с нулевыми столбцами. Что не так с этим форматированием?

Ожидаемое поведение:

2019-04-20

Должно стать:

04-20

Пожалуйста, дайте мне знать.

Ответы [ 2 ]

2 голосов
/ 29 апреля 2020

Вы делаете это слишком сложным.

Ваш Concat делает свое дело, но вы можете использовать DATE_FORMAT

SET @a ='2020-04-29';
SELECT CONCAT(LPAD(MONTH(@a),2,0), '-', LPAD(DAY(@a),2,0))
| CONCAT(LPAD(MONTH(@a),2,0), '-', LPAD(DAY(@a),2,0)) |
| :-------------------------------------------------- |
| 04-29                                               |
SELECT DATE_FORMAT(@a,'%m-%d')
| DATE_FORMAT(@a,'%m-%d') |
| :---------------------- |
| 04-29                   |

дБ <> скрипка здесь

1 голос
/ 29 апреля 2020

Дата по определению содержит год, поэтому 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                        |
+------------------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...