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

एमएस एसक्यूएल सर्वर 2005 में एक तारीख से सप्ताह की संख्या प्राप्त करना?

इस बात से अवगत रहें कि संस्कृति के आधार पर, जिसे सही सप्ताह संख्या माना जाता है, उसमें अंतर होता है। सप्ताह की संख्या कुछ मान्यताओं पर निर्भर करती है जो अलग-अलग देशों में भिन्न होती हैं, इस मामले पर विकिपीडिया लेख देखें। एक आईएसओ मानक (आईएसओ 8601) है जो सप्ताह की संख्याओं पर लागू होता है।

SQL सर्वर एकीकृत DATEPART() जरूरी नहीं कि फंक्शन द राइट थिंग ही करे। SQL सर्वर मानता है कि सप्ताह 1 का दिन 1 जनवरी 1 होगा, कई अनुप्रयोगों के लिए जो गलत है।

सप्ताह की संख्याओं की सही गणना करना गैर-तुच्छ है, और विभिन्न कार्यान्वयन वेब पर पाए जा सकते हैं। उदाहरण के लिए, एक यूडीएफ है जो 1930-2030 तक आईएसओ सप्ताह संख्याओं की गणना करता है, जो कई अन्य में से एक है। आपको जांचना होगा कि आपके लिए क्या काम करता है।

यह ऑनलाइन बुक्स से है (हालांकि आप शायद जोनास लिंकन के उत्तर से एक का उपयोग करना चाहते हैं, बीओएल संस्करण गलत लगता है):

CREATE FUNCTION ISOweek  (@DATE DATETIME)
RETURNS INT
AS
BEGIN
   DECLARE @ISOweek INT
   SET @ISOweek = DATEPART(wk,@DATE) 
                  +1 
                  -DATEPART(wk,CAST(DATEPART(yy,@DATE) AS CHAR(4))+'0104')
   -- Special cases: Jan 1-3 may belong to the previous year
   IF (@ISOweek=0)
      SET @ISOweek = dbo.ISOweek(CAST(DATEPART(yy,@DATE) - 1
                     AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1
   -- Special case: Dec 29-31 may belong to the next year
   IF ((DATEPART(mm,@DATE)=12) AND
      ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))
      SET @ISOweek=1
   RETURN(@ISOweek)
END
GO


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. उन सभी तालिकाओं को छोड़ दें जिनके नाम एक निश्चित स्ट्रिंग से शुरू होते हैं

  2. संदर्भ उपनाम (चयन में परिकलित) WHERE खंड में

  3. समाधान में सभी एसएसआईएस पैकेजों की सभी त्रुटियां कैसे प्राप्त करें

  4. SQL सर्वर 2016 में नया मेटाडेटा-केवल कॉलम परिवर्तन

  5. SQL सर्वर 2016:हमेशा एन्क्रिप्टेड