首页 / MYSQL / mysql-仅按月和日比较日期
mysql-仅按月和日比较日期
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-仅按月和日比较日期,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1234字,纯文字阅读大概需要2分钟。
内容图文
![mysql-仅按月和日比较日期](/upload/InfoBanner/zyjiaocheng/881/8d5d0bbf4078495899bce624c896d47a.jpg)
我的foos表中有日期字段.所以现在我需要从日期间隔中选择所有foo,但仅比较月份和日期.
例如,我需要选择2012年1月7日之前和之后10天的所有foo- 12月28日-1月17日或2009年7月10日左右的一周-> 7月3日至7月17日.应仅根据全年的月份和日期进行选择.
我原始的解决方案
SELECT b_date FROM foos
WHERE DAYOFYEAR(b_date) BETWEEN
DAYOFYEAR('2011-01-07' - INTERVAL 10 DAY) AND (DAYOFYEAR('2011-01-07' - INTERVAL 10 DAY) + 20)
OR DAYOFYEAR(b_date) BETWEEN
(DAYOFYEAR('2011-01-07' + INTERVAL 10 DAY) - 20) AND DAYOFYEAR('2011-01-07' + INTERVAL 10 DAY)
GROUP BY foos.id;
解决方法:
如果要查找日期为2011年12月28日和2012年1月17日的所有日期,则可以使用以下方法:
WHERE DateColumn BETWEEN '2012-01-07' - INTERVAL 10 DAY
AND '2012-01-07' + INTERVAL 10 DAY
对于更一般的问题,我看到了两种方法.易于编写,但使用大型foos表可能会很慢:
SELECT f.*
FROM
foos AS f
CROSS JOIN
( SELECT 32 * MONTH(StartDate) + DAY(StartDate)
AS StartCheck
, 32 * MONTH(EndDate) + DAY(EndDate)
AS EndCheck
FROM
( SELECT ('2012-01-07' - INTERVAL 10 DAY) AS StartDate
, ('2012-01-07' + INTERVAL 10 DAY) AS EndDate
) AS c
) AS cc
WHERE 32*MONTH(f.DateColumn)+DAY(f.DateColumn) BETWEEN StartCheck
AND EndCheck
OR StartCheck > EndCheck
AND 32*MONTH(f.DateColumn)+DAY(f.DateColumn) NOT BETWEEN EndCheck + 1
AND StartCheck - 1
内容总结
以上是互联网集市为您收集整理的mysql-仅按月和日比较日期全部内容,希望文章能够帮你解决mysql-仅按月和日比较日期所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】