MySQL版本:8.0.18字符集:utf8mb4排序规则:utf8mb4_unicode_ci
我正在构建一个规则集,将"当前"日期条目转换为date条目(因为我们将日期存储为实际的date数据类型,而不是文本(。
在这样做的过程中,我发现了一些非常奇怪的事情。我想要一个00-00-2020(例如(表示"present"的规则集。
当我执行这个:
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前面,结果是一样的。
究竟为什么我从应该完全相同的代码中收到两个不同的结果?
我对您出现问题并不感到惊讶,因为2020-00-00
是一个不存在的虚假日期。也就是说,更好的方法是使用DATE_FORMAT
:
SELECT DATE_FORMAT(NOW(), '%Y-01-01')
SET out_result_formatted_date = DATE_FORMAT(NOW(), '%Y-01-01')
这将在当前年份的第一天和第一个月构建一个有效的日期文本。