SQL返回属于句点和范围的日期

时间:2010-03-17 21:37:08

标签: sql mysql date

我一直在研究这个问题......我的目标是从开始日期开始返回所有日期,这些日期介于开始日期和结束日期之间,并且有一定的时间段作为因素。 (很难解释)

例如......

开始日期:1987年11月20日;结束日期:1988年1月1日;期限:10天;

我想要这些日期:1987年11月20日; 1987年11月30日; 1987年12月10日; 1987年12月20日; 1987年12月30日;

我已经有一个日期表,所有日期都在1900年到2099年之间。这段时间可能是几天,几个月或几年。有任何想法吗?如果您需要更多信息,请告诉我。

的MySQL

2 个答案:

答案 0 :(得分:7)

几天使用DATEDIFF和模运算:

SELECT * FROM dates
WHERE `date` BETWEEN '1987-10-20' AND '1988-1-1'
AND DATEDIFF(`date`, '1987-10-20') % 10 = 0

在10年的时间内,计算以时间为模的年份差异,并确保月份和日期相同:

SELECT * FROM dates
WHERE `date` BETWEEN '1980-10-20' AND '2000-10-20'
AND MONTH(date) = 10 AND DAY(date) = 20 AND (YEAR(date) - 1980) % 10 = 0

以月为单位的时间段没有明确定义,因为月份的长度不同。什么比1月30日晚一个月?您可以将其用于某些特殊情况,例如“本月第一次”。

答案 1 :(得分:1)

如果您使用的是MS SQL Server 2005或更高版本,则可以使用递归公用表表达式:

WITH Days AS
(
    SELECT CONVERT(DATETIME, '11/20/87') AS Date
    UNION ALL
    SELECT DATEADD(DAY, 10, Days.Date) AS Date
    FROM Days
    WHERE Days.Date < '1/1/88'
)
SELECT Days.Date
FROM Days
WHERE Days.Date < '1/1/88'