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

अनुक्रमित लुकअप के साथ केवल दिनांक भागों की तुलना करने के लिए SQL सर्वर डेटाटाइम फ़ील्ड को कनवर्ट करें

डेटाटाइम फ़ील्ड के समय भाग को अलग करने का सबसे अच्छा तरीका दिनांकित और डेटेड फ़ंक्शन का उपयोग करना है।

   DateAdd(day, datediff(day,0, MydateValue), 0)

यह इस तथ्य का लाभ उठाता है कि SQL सर्वर दिनांक को दो पूर्णांकों के रूप में संग्रहीत करता है, एक दिन "0" - (1 जनवरी 1900) से दिनों की संख्या का प्रतिनिधित्व करता है, और दूसरा जो टिकों<की संख्या का प्रतिनिधित्व करता है। /em> (प्रत्येक टिक लगभग 3.33 एमएस है) मध्यरात्रि से (उस समय के लिए) *।

उपरोक्त सूत्र को केवल पहले पूर्णांक को पढ़ना है। कोई रूपांतरण या प्रसंस्करण की आवश्यकता नहीं है, इसलिए यह बहुत तेज़ है।

अपने प्रश्नों को एक अनुक्रमणिका का उपयोग करने के लिए... पहले इनपुट फ़िल्टरिंग पैरामीटर पर इस सूत्र का उपयोग करें, या तालिका दिनांक समय फ़ील्ड से बराबर चिह्न के "अन्य" पक्ष पर, ताकि क्वेरी अनुकूलक को गणना चलाने की आवश्यकता न हो तालिका में प्रत्येक डेटाटाइम फ़ील्ड पर यह निर्धारित करने के लिए कि कौन सी पंक्तियाँ फ़िल्टर विधेय को संतुष्ट करती हैं। यह आपके खोज तर्क को "SARG-able" (Search ARGument) बनाता है

Where MyDateTimeColumn > DateAdd(day, 
      datediff(day,0, @MydateParameter), 0)    -- SARG-able

के बजाय

Where DateAdd(day, datediff(day,0, 
      MyDateTimeColumn ), 0) > @MydateParameter -- Not SARG-able

* टिप्पणी। आंतरिक रूप से, दूसरा पूर्णांक (समय भाग) टिक को संग्रहीत करता है। एक दिन में 24 x 60 X 60 X 300 =25,920,000 टिक होते हैं (एक 32 बिट पूर्णांक धारण कर सकने वाले अधिकतम मान के ठीक नीचे)। हालांकि, आपको इस बारे में चिंता करने की ज़रूरत नहीं है जब अंकगणितीय रूप से डेटाटाइम को संशोधित करते हैं... डेटाटाइम्स से मूल्यों को जोड़ते या घटाते समय आप मान को एक अंश के रूप में मान सकते हैं जैसे कि यह एक दिन के आंशिक हिस्से के बराबर था, जैसे कि पूर्ण डेटाटाइम मान एक फ़्लोटिंग पॉइंट नंबर था जिसमें दिनांक का प्रतिनिधित्व करने वाला एक पूर्णांक भाग और समय का प्रतिनिधित्व करने वाला आंशिक भाग होता है)। यानी,

`Declare @Dt DateTime  Set @Dt = getdate()  
 Set @Dt = @Dt + 1.0/24  -- Adds one hour  
 Select @Dt  
 Set @Dt = @Dt - .25 -- Moves back 6 hours  
 Select @Dt`


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस पर RESEED पहचान कॉलम

  2. SQL सर्वर में दो अलग-अलग सर्वरों से डेटा का चयन करना

  3. SQL सर्वर में SHOWPLAN_XML कैसे काम करता है

  4. SQL में किसी फ़ंक्शन के पैरामीटर के लिए एकाधिक मान पास करना

  5. SQL सर्वर में DELETE पास-थ्रू क्वेरी कैसे करें