我有一张有一些假期的桌子,像这样:
id | 日期 | 假期名称 |
---|---|---|
1 | 2000-10-24 | 假期1 |
2 | 2000-09-18 | 假期2 |
3 | 2000-01-04 | 假期3 |
年份总是一样的。我想获取当前日期记录之后的下一条记录。我现在有这样的疑问:
SELECT *
FROM holidays
WHERE date > CURDATE()
ORDER BY date
LIMIT 1
年底前运作良好。但是,如果当前日期是 12 月,下一个日期是 1 月,则查询不起作用,因为年份相同,并且 SQL 会将其视为已通过的记录。我该如何解决这个问题?
SELECT *
FROM (
SELECT *, CONCAT(YEAR(CURRENT_DATE), SUBSTRING(`date` FROM 5)) ndate
FROM holidays
UNION ALL
SELECT *, CONCAT(1 + YEAR(CURRENT_DATE), SUBSTRING(`date` FROM 5))
FROM holidays
) normalized
WHERE ndate > CURRENT_DATE
ORDER BY ndate
LIMIT 1