Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में डेलाइट सेविंग टाइम स्टार्ट और एंड फंक्शन कैसे बनाएं?

यह न भूलें कि डेलाइट सेविंग टाइम शेड्यूल देश के आधार पर बदलता है, और वर्षों से परिवर्तन के अधीन भी है:वर्तमान यूएस सिस्टम 2007 में प्रभावी हुआ, उदाहरण के लिए।

यह मानते हुए कि आप यूएस के लिए वर्तमान प्रणाली चाहते हैं, यहां किसी भी वर्ष के लिए उत्तर का एक रूप दिया गया है।

SET DATEFIRST 7

DECLARE @year INT = 2013
DECLARE
    @StartOfMarch DATETIME ,
    @StartOfNovember DATETIME ,
    @DstStart DATETIME ,
    @DstEnd DATETIME



SET @StartOfMarch = DATEADD(MONTH, 2, DATEADD(YEAR, @year - 1900, 0))
SET @StartOfNovember = DATEADD(MONTH, 10, DATEADD(YEAR, @year - 1900, 0));
SET @DstStart = DATEADD(HOUR, 2,
                        DATEADD(day,
                                ( ( 15 - DATEPART(dw, @StartOfMarch) ) % 7 )
                                + 7, @StartOfMarch))
SET @DstEnd = DATEADD(HOUR, 2,
                      DATEADD(day,
                              ( ( 8 - DATEPART(dw, @StartOfNovember) ) % 7 ),
                              @StartOfNovember))


SELECT
    @DstStart AS DstStartInUS ,
    @DstEnd AS DstEndInUS

या कार्यों के रूप में, लेकिन आपको यह जानना होगा कि डेटफर्स्ट 7 पर सेट है, अन्यथा गणित बंद हो जाएगा।

CREATE FUNCTION GetDstStart ( @Year AS INT )
RETURNS DATETIME
AS
    BEGIN

        DECLARE
            @StartOfMarch DATETIME ,
            @DstStart DATETIME 

        SET @StartOfMarch = DATEADD(MONTH, 2,
                                    DATEADD(YEAR, @year - 1900, 0))
        SET @DstStart = DATEADD(HOUR, 2,
                                DATEADD(day,
                                        ( ( 15 - DATEPART(dw,
                                                          @StartOfMarch) )
                                          % 7 ) + 7, @StartOfMarch))
        RETURN @DstStart
    END

GO;


CREATE FUNCTION GetDstEnd ( @Year AS INT )
RETURNS DATETIME
AS
    BEGIN
        DECLARE
            @StartOfNovember DATETIME ,
            @DstEnd DATETIME

        SET @StartOfNovember = DATEADD(MONTH, 10,
                                       DATEADD(YEAR, @year - 1900, 0))
        SET @DstEnd = DATEADD(HOUR, 2,
                              DATEADD(day,
                                      ( ( 8 - DATEPART(dw,
                                                       @StartOfNovember) )
                                        % 7 ), @StartOfNovember))
        RETURN @DstEnd
    END


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2008 को जावा से कनेक्ट करना:उपयोगकर्ता त्रुटि के लिए लॉगिन विफल रहा

  2. SQL सर्वर में "अंतिम संशोधित" कॉलम बनाएं

  3. कैसे एक varchar autoincrement करने के लिए

  4. एसक्यूएल सर्वर में सबक्वायरी का उपयोग कर अद्यतन क्वेरी

  5. अपने SQL सर्वर कार्यभार को जानना