我有像
这样的结构表ID | Name | StartDate | EndDate
如何选择包含闰年的日期范围的记录?例如,日期范围从2011-01-01(StartDate)到2013-01-01(EndDate)的记录?这个范围包含闰年。我使用MS SQL。
谢谢。
答案 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。