我的示例查询:
declare @todaysdate datetime = getdate()
select * from foo f
WHERE f.completedt < (CAST(MONTH(@todaysdate) AS VARCHAR) + '/' + CAST(DAY(@todaysdate) AS VARCHAR) + '/' + CAST(f.yr - 1 AS VARCHAR))
如果你看到我在where子句中使用(yr - 1)
并且这会导致2011年,2010年出现date out of range
错误,有没有一种方法可以检查查询中的闰年并使用正确的日期?< / p>
答案 0 :(得分:3)
尝试用以下方式替换yr - 1:
DATEADD(year,-1,yr )
答案 1 :(得分:2)
根据您对其他答案的评论,如何处理这些问题:
DECLARE @testyear INT
SET @testyear = 2011
SELECT DATEADD(year, @testyear-DATEPART(YEAR, GETDATE()), GETDATE())
我们正在确定我们想要在输入中添加或减去多少年份。
所以在你的情况下,我认为它会是:
select * from foo f inner join @yrtable y on f.yr = y.year
WHERE f.completedt < DATEADD(year, @testyear-DATEPART(YEAR, @todaysdate), @todaysdate)
(假设我的减法方法正确)。 :)
答案 2 :(得分:0)
如果您想确定年份是否为闰年,那么此代码可以帮助您。
DECLARE
year integer := 2021;
BEGIN
if((year mod(4) = 0) and (year mod(100) != 0) or (year mod(400) = 0)) then
dbms_output.put_line('Leap year');
else
dbms_output.put_line('not Leap year');
end if;
dbms_output.put_line('end');
END;
参考它并在代码中进行所需的修改