gpt4 book ai didi

mysql - 按月和日选择mysql中的 'DATE'字段并进行比较

转载 作者:行者123 更新时间:2023-11-29 06:33:23 24 4
gpt4 key购买 nike

尝试从数据库中选择最接近的上一个和下一个假期。例如,元旦总是在 1 月 1 日,而除夕总是在 12 月 31 日。当前年份完全无关紧要,因此我尝试使用以下 MySQL 查询按日期和月份(除夕)选择上一个假期:

SELECT * FROM `calendar` WHERE DATE_FORMAT(`holidayDate`, "%m-%d") < "01-01"

它给出 NULL。我原以为它会下降,并会在上个月,即 12 月出现,但是......

尝试了很多不同的方法,但仍然没有成功。

P.S.: 在这种情况下不能使用 TIMESTAMP...

最佳答案

它返回 null 的原因是因为没有比 '01-01' 少的东西。查询不会回到开头。

我会做的是写一个案例陈述来检查你是否在最早的假期。

如果你是最早的假期,那么你可以选择最晚的假期(一种环绕方式)。如果你不是最早的假期,那么你需要选择它之前的那个。我通过按降序排列它们并将其限制为 1 来做到这一点。(有效地捕获了当前日期之前发生的假期。)

试试这个:

SELECT *
FROM calendar
WHERE
CASE WHEN DATE_FORMAT(CURDATE(), '%m-%d') = DATE_FORMAT((SELECT MIN(c.holidayDate) FROM calendar c), '%m-%d')
THEN holidayDate = (SELECT MAX(c.holidayDate) FROM calendar c)
ELSE
DATE_FORMAT(holidayDate, '%m-%d') < DATE_FORMAT(CURDATE(), '%m-%d')
END
ORDER BY holidayDate DESC
LIMIT 1;

这是一个 SQL Fiddle例子。我创建了两个查询。一个使用当前日期(如上所示),另一个硬编码 1 月 1 日以表明 case 语句确实有效。我只添加了某些假期来测试。

关于mysql - 按月和日选择mysql中的 'DATE'字段并进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26532050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com