如何选择日期范围为闰年的记录?

时间:2015-03-30 13:22:29

标签: sql sql-server sql-server-2008

我有像

这样的结构表
ID | Name | StartDate | EndDate

如何选择包含闰年的日期范围的记录?例如,日期范围从2011-01-01(StartDate)到2013-01-01(EndDate)的记录?这个范围包含闰年。我使用MS SQL。

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以创建一个表LeapYears,然后查询很简单:

SELECT t.*
FROM TableName t
WHERE EXISTS
(
   SELECT 1 FROM LeapYears ly
   WHERE ly.[Date] >= StartDate AND ly.[Date] <= EndDate
)

要创建LeapYear表,您可以使用它:

DECLARE @startYear int 
DECLARE @endYear int
SET @startYear = 2000
SET @endYear = 2030
CREATE  TABLE LeapYears(ID int IDENTITY(1,1), [Date] DATETIME)

DECLARE @currentYear int
SET @currentYear = @startYear
WHILE @currentYear <= @endYear
BEGIN
  DECLARE @yearStr char(4)
  SELECT @yearStr = CAST(@currentYear AS char(4))
  IF ISDATE(@yearStr + '0229') = 1  
     INSERT INTO LeapYears VALUES(@yearStr + '0229')
  SET @currentYear = @currentYear + 1
END

脚本创建这些记录:

ID  Date
1   2000-02-29 00:00:00.000
2   2004-02-29 00:00:00.000
3   2008-02-29 00:00:00.000
4   2012-02-29 00:00:00.000
5   2016-02-29 00:00:00.000
6   2020-02-29 00:00:00.000
7   2024-02-29 00:00:00.000
8   2028-02-29 00:00:00.000

答案 1 :(得分:0)

我建议您编写一个接收两个日期时间的存储过程,并验证每年的时间段是否为闰年。要做到这一点,你可以简单地做年mod 4 = 0。