MySQL ДАТА Поведение и проблемы с результатами - PullRequest
0 голосов
/ 20 апреля 2020

MySQL Версия: 8.0.18 Кодировка: utf8mb4 Сортировка: utf8mb4_unicode_ci

Я собираю набор правил, который преобразует «существующие» записи даты в запись DATE (поскольку мы храним даты как фактическую DATE типы данных, а не текст).

При этом я обнаружил нечто ОЧЕНЬ странное. Я хотел набор правил, где 00-00-2020 (например) будет представлять «настоящее».

Когда я выполняю это:

SELECT date(CONCAT(YEAR(NOW()),'-00-00'));

В результате получается «0/0/2020» как значение результата DATE.

Однако, когда я выполняю это в своей ХРАНЕННОЙ ПРОЦЕДУРЕ:

SET out_result_formatted_date = CONCAT(YEAR(NOW()),'-00-00');

Результатом всегда является «1/1/0001». Обратите внимание, что out_result_formatted_date имеет тип DATE. Также обратите внимание, что если я поставлю DATE перед CONCAT (хранимой процедуры), результат будет таким же.

1 Ответ

0 голосов
/ 20 апреля 2020

Я не удивлен, что у вас возникли проблемы, поскольку 2020-00-00 - фиктивная дата, которой не существует. При этом, лучший способ сделать это - использовать DATE_FORMAT:

SELECT DATE_FORMAT(NOW(), '%Y-01-01')
SET out_result_formatted_date = DATE_FORMAT(NOW(), '%Y-01-01')

. При этом строится действительный литерал даты в первый день и месяц текущего года.

...