MySQL 日期行为和结果问题



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')

这将在当前年份的第一天和第一个月构建一个有效的日期文本。

相关内容

  • 没有找到相关文章

最新更新