MySQL 计算今年是否为闰年

骑猪看日落 2022-11-20 07:00 175阅读 0赞

备注:测试数据库版本为MySQL 8.0

一.问题:

求今年是否为闰年

二.解决方案

根据2月份最后一天来判断

  1. select day(
  2. last_day(
  3. date_add(
  4. date_add(
  5. date_add(current_date,
  6. interval - dayofyear(current_date) day),
  7. interval 1 day),
  8. interval 1 month))) dy;

测试记录

  1. mysql> select day(
  2. -> last_day(
  3. -> date_add(
  4. -> date_add(
  5. -> date_add(current_date,
  6. -> interval - dayofyear(current_date) day),
  7. -> interval 1 day),
  8. -> interval 1 month))) dy;
  9. +------+
  10. | dy |
  11. +------+
  12. | 29 |
  13. +------+
  14. 1 row in set (0.01 sec)

这样看起来有点麻烦,分解开
dayofyear(current_date) – 求出今天是本年的第多少天
date_add(date, interval - n day) – 今天的天数减去截止当前是今年多少天 得出上年的12月31日
date_add(date, interval + 1 day) – 得出今年1月的第1天
date_add(date, interval + 1 month) – 得出今年2月的第一天
last_day(date) – 得出2月份最后一天
day(date) —求出日

测试记录:

  1. mysql> select dayofyear(current_date);
  2. +-------------------------+
  3. | dayofyear(current_date) |
  4. +-------------------------+
  5. | 289 |
  6. +-------------------------+
  7. 1 row in set (0.00 sec)
  8. mysql> select date_add(current_date,interval -289 day);
  9. +------------------------------------------+
  10. | date_add(current_date,interval -289 day) |
  11. +------------------------------------------+
  12. | 2019-12-31 |
  13. +------------------------------------------+
  14. 1 row in set (0.00 sec)
  15. mysql>
  16. mysql> select date_add('2019-12-31',interval 1 day);
  17. +---------------------------------------+
  18. | date_add('2019-12-31',interval 1 day) |
  19. +---------------------------------------+
  20. | 2020-01-01 |
  21. +---------------------------------------+
  22. 1 row in set (0.00 sec)
  23. mysql>
  24. mysql> select date_add('2020-01-01',interval 1 month);
  25. +-----------------------------------------+
  26. | date_add('2020-01-01',interval 1 month) |
  27. +-----------------------------------------+
  28. | 2020-02-01 |
  29. +-----------------------------------------+
  30. 1 row in set (0.00 sec)
  31. mysql>
  32. mysql> select last_day('2020-02-01');
  33. +------------------------+
  34. | last_day('2020-02-01') |
  35. +------------------------+
  36. | 2020-02-29 |
  37. +------------------------+
  38. 1 row in set (0.00 sec)
  39. mysql> select day('2020-02-29');
  40. +-------------------+
  41. | day('2020-02-29') |
  42. +-------------------+
  43. | 29 |
  44. +-------------------+
  45. 1 row in set (0.00 sec)

发表评论

表情:
评论列表 (有 0 条评论,175人围观)

还没有评论,来说两句吧...

相关阅读