2011-06-30 10 views

उत्तर

29

29 वें फरवरी को जांच:

मैं इस कोड है

CASE WHEN ISDATE(CAST(@YEAR AS char(4)) + '0229') = 1 THEN 'LEAP YEAR' ELSE 'NORMAL YEAR' END 

या का उपयोग निम्नलिखित नियम

CASE WHEN (@YEAR % 4 = 0 AND @YEAR % 100 <> 0) OR @YEAR % 400 = 0 THEN 'LEAP YEAR'... 
+0

फाई आरएसटी शानदार है! – Alex

+0

बिल्कुल मुझे क्या चाहिए, धन्यवाद! – Lexi847942

3

लीप वर्ष गणना:

(@year % 4 = 0) and (@year % 100 != 0) or (@year % 400 = 0) 

जब यह सच है, तो यह एक लीप वर्ष है। या यह मामला बयान में डाल करने के लिए

select case when 
    (
     (@year % 4 = 0) and (@year % 100 != 0) or 
     (@year % 400 = 0) 
    ) then 'LEAP' else 'USUAL' end 
; 
+0

यह अभिव्यक्ति कभी भी सच नहीं हो सकती है ... – gbn

+0

ने एक अपडेट किया है जैसा आपने अपने अपडेट किए गए उत्तर में किया था। मैं इसे साबित करने के लिए एसक्यूएल में बस परीक्षण कर रहा था। तो हम दोनों ने एक ही गणना के साथ उत्तर दिया। –

1

मैं एक बेहतर समाधान

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 

-2
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); 
+2

यह एसक्यूएल-सर्वर नहीं है और पीछे गणित गलत है –

+1

परीक्षण मॉड्यूल 4 पर्याप्त नहीं है। यहां देखें: [http://stackoverflow.com/a/725111/818827 ](httpoverflow.com/a/725111/818827) –

0
select decode(mod(&n,4),0,'leap year' ,'not a leapyear') as CHECK_LEAPYEAR from dual 
+0

इस दोस्तों को आजमाएं, इसका सरल –

+0

हां, बहुत जटिल नहीं –

+1

यह नहीं है एसक्यूएल-सर्वर और गणित पीछे गलत है –

2

उपयोग करने के लिए स्वतंत्र लग रहा है है यह भी मदद कर सकता है

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 
संबंधित मुद्दे