Bir yılın bir yıl olup olmadığını nasıl kontrol ederim?Artık yıl için kontrol edin
declare @year int
set @year = 1968
SELECT CASE WHEN @YEAR = <LEAPYEAR> THEN 'LEAP YEAR' ELSE 'NORMAL YEAR' END
Beklenen sonuç: 29 Şubat için
LEAP YEAR
Bir yılın bir yıl olup olmadığını nasıl kontrol ederim?Artık yıl için kontrol edin
declare @year int
set @year = 1968
SELECT CASE WHEN @YEAR = <LEAPYEAR> THEN 'LEAP YEAR' ELSE 'NORMAL YEAR' END
Beklenen sonuç: 29 Şubat için
LEAP YEAR
kontrol:
Bu kodu vardır
CASE WHEN ISDATE(CAST(@YEAR AS char(4)) + '0229') = 1 THEN 'LEAP YEAR' ELSE 'NORMAL YEAR' END
veya kullanım aşağıdaki kural
CASE WHEN (@YEAR % 4 = 0 AND @YEAR % 100 <> 0) OR @YEAR % 400 = 0 THEN 'LEAP YEAR'...
Artık yıl hesaplama: Bu doğru olduğunda
(@year % 4 = 0) and (@year % 100 != 0) or (@year % 400 = 0)
, o zaman bir artık yıl. Veya case ifadesi koymak
select case when
(
(@year % 4 = 0) and (@year % 100 != 0) or
(@year % 400 = 0)
) then 'LEAP' else 'USUAL' end
;
Bu ifade asla doğru olamaz ... – gbn
güncellenmiş bir cevabında yaptığınız gibi bir 'AND' güncellendi. Bunu kanıtlamak için SQL'de test ediyordum. Yani ikimiz de aynı hesaplama ile cevap verdik. –
Ben Bu aynı zamanda yardımcı olabilecek
CREATE FUNCTION dbo.IsLeapYear(@year INT)
RETURNS BIT AS
BEGIN
DECLARE @d DATETIME,
@ans BIT
SET @d = CONVERT(DATETIME,'31/01/'+CONVERT(VARCHAR(4),@year),103)
IF DATEPART(DAY,DATEADD(MONTH,1,@d))=29 SET @ans=1 ELSE SET @ans=0
RETURN @ans
END
GO
select
CASE
WHEN result = 0 THEN 'Leap_Year'
WHEN result <> 0 THEN 'Not_A_Leap_Year'
END
from(select mod((EXTRACT(YEAR FROM DATE '2013-08-23')), 4) result FROM DUAL);
bu sql-server değildir ve arkasındaki matematik yanlış –
Test modulo 4 yeterli değildir. Buraya bakın: [http://stackoverflow.com/a/725111/818827](http://stackoverflow.com/a/725111/818827) –
select decode(mod(&n,4),0,'leap year' ,'not a leapyear') as CHECK_LEAPYEAR from dual
Bu Guys'i Deneyin, Basit –
Evet, çok da zor değil –
sql-server ve arkasındaki matematik yanlış –
kullanmaktan çekinmeyin daha iyi bir çözüm
DECLARE @year INT = 2012
SELECT IIF(DAY(EOMONTH(DATEFROMPARTS(@year,2,1))) = 29,1,0)
Result: 1 --(1 if Leap Year, 0 if not)
SELECT IIF(DAY(EOMONTH(DATEFROMPARTS(@year,2,1))) = 29,'Leap year','Not Leap year')
Result: Leap year
fi Birincisi parlak! – Alex
Tam olarak ihtiyacım olan şey, teşekkürler! – Lexi847942