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

मैं SQL सर्वर में डेटाटाइम कैसे छोटा कर सकता हूं?

यह कई वर्षों बाद भी अक्सर अतिरिक्त वोट इकट्ठा करना जारी रखता है, और इसलिए मुझे इसे Sql सर्वर के आधुनिक संस्करणों के लिए अपडेट करने की आवश्यकता है। Sql Server 2008 और बाद के संस्करण के लिए, यह आसान है:

cast(getDate() As Date)

ध्यान दें कि नीचे के पास के अंतिम तीन पैराग्राफ अभी भी लागू होते हैं, और आपको अक्सर एक कदम पीछे हटने और पहली जगह में कास्ट से बचने का तरीका खोजने की आवश्यकता होती है।

लेकिन इसे पूरा करने के अन्य तरीके भी हैं। यहाँ सबसे आम हैं।

सही तरीका (एसक्यूएल सर्वर 2008 के बाद से नया):

cast(getdate() As Date)

सही तरीका (पुराना):

dateadd(dd, datediff(dd,0, getDate()), 0)

यह अब पुराना है, लेकिन यह अभी भी जानने योग्य है क्योंकि यह अन्य समय बिंदुओं के लिए भी आसानी से अनुकूलित हो सकता है, जैसे महीने का पहला क्षण, मिनट, घंटा, या वर्ष।

यह सही तरीका प्रलेखित कार्यों का उपयोग करता है जो एएनएसआई मानक का हिस्सा हैं और काम करने की गारंटी है, लेकिन यह कुछ हद तक धीमा हो सकता है। यह पता लगाने के द्वारा काम करता है कि दिन 0 से लेकर वर्तमान दिन तक कितने दिन हैं, और कई दिन पहले से दिन 0 तक जोड़ते हैं। यह काम करेगा कि आपका डेटाटाइम कैसे संग्रहीत किया जाता है और इससे कोई फर्क नहीं पड़ता कि आपका लोकेल क्या है।

तेज़ तरीका:

cast(floor(cast(getdate() as float)) as datetime)

यह काम करता है क्योंकि डेटाटाइम कॉलम 8-बाइट बाइनरी मानों के रूप में संग्रहीत होते हैं। उन्हें तैरने के लिए कास्ट करें, अंश को हटाने के लिए उन्हें फर्श दें, और जब आप उन्हें डेटाटाइम पर वापस डालते हैं तो मानों का समय भाग समाप्त हो जाता है। यह बिना किसी जटिल तर्क के बस थोड़ा सा बदलाव है और यह बहुत है तेज।

ध्यान रखें कि यह एक कार्यान्वयन विवरण पर निर्भर करता है Microsoft किसी भी समय बदलने के लिए स्वतंत्र है, यहां तक ​​कि एक स्वचालित सेवा अद्यतन में भी। यह भी बहुत पोर्टेबल नहीं है। व्यवहार में, यह बहुत कम संभावना है कि यह कार्यान्वयन जल्द ही किसी भी समय बदल जाएगा, लेकिन यदि आप इसका उपयोग करना चुनते हैं तो खतरे से अवगत होना अभी भी महत्वपूर्ण है। और अब जबकि हमारे पास तिथि के रूप में कास्ट करने का विकल्प है, यह शायद ही कभी आवश्यक हो।

गलत तरीका:

cast(convert(char(11), getdate(), 113) as datetime)

गलत तरीका स्ट्रिंग में कनवर्ट करके, स्ट्रिंग को छोटा करके और डेटाटाइम में वापस कनवर्ट करके काम करता है। यह गलत है , दो कारणों से:1) हो सकता है कि यह सभी स्थानों पर काम न करे और 2) यह ऐसा करने के सबसे धीमे संभव तरीके के बारे में है... और केवल थोड़ा ही नहीं; यह परिमाण के क्रम जैसा है या अन्य विकल्पों की तुलना में दो धीमा है।

अपडेट करें इसे हाल ही में कुछ वोट मिल रहे हैं, और इसलिए मैं इसमें जोड़ना चाहता हूं कि जब से मैंने इसे पोस्ट किया है, मैंने कुछ ठोस सबूत देखे हैं कि एसक्यूएल सर्वर "सही" तरीके और "तेज़" तरीके के बीच प्रदर्शन अंतर को दूर कर देगा, यानी अब आपको पहले वाले का पक्ष लेना चाहिए।

किसी भी मामले में, आप पहली बार ऐसा करने की आवश्यकता से बचने के लिए अपने प्रश्नों को लिखना चाहते हैं . यह बहुत दुर्लभ है कि आपको यह कार्य डेटाबेस पर करना चाहिए।

ज्यादातर जगहों पर, डेटाबेस पहले से ही आपकी अड़चन है। यह आमतौर पर सर्वर है जो प्रदर्शन में सुधार के लिए हार्डवेयर जोड़ने के लिए सबसे महंगा है और उन परिवर्धन को सही करने के लिए सबसे कठिन है (उदाहरण के लिए, आपको मेमोरी के साथ डिस्क को संतुलित करना होगा)। तकनीकी रूप से और व्यावसायिक दृष्टिकोण से, बाहरी रूप से स्केल करना भी सबसे कठिन है; डेटाबेस सर्वर की तुलना में वेब या एप्लिकेशन सर्वर जोड़ना तकनीकी रूप से बहुत आसान है और भले ही वह गलत हो, आप आईआईएस या अपाचे के लिए प्रति सर्वर लाइसेंस $ 20,000 + का भुगतान नहीं करते हैं।

मैं जो बात कहने की कोशिश कर रहा हूं वह यह है कि जब भी संभव हो आपको यह काम आवेदन स्तर पर करना चाहिए। केवल जिस समय आपको कभी भी एसक्यूएल सर्वर पर डेटाटाइम को छोटा करना चाहिए, जब आपको दिन के अनुसार समूह बनाने की आवश्यकता होती है, और तब भी आपके पास एक गणना कॉलम के रूप में स्थापित एक अतिरिक्त कॉलम होना चाहिए, जिसे सम्मिलित/अद्यतन समय पर बनाए रखा जाता है, या एप्लिकेशन में बनाए रखा जाता है तर्क। इस इंडेक्स-ब्रेकिंग, सीपीयू-हैवी वर्क को अपने डेटाबेस से हटा दें।



  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 सर्वर (T-SQL) में यूएस दिनांक स्वरूप में दिनांक कैसे प्रदर्शित करें

  2. SQL सर्वर किसी भी ऑपरेटर ने समझाया

  3. तालिका के केवल एक कॉलम के आधार पर डुप्लिकेट मानों को हटाना

  4. SQL सर्वर मौजूदा तालिका में ऑटो वृद्धि प्राथमिक कुंजी जोड़ें

  5. SQL सर्वर में लेफ्ट जॉइन और राइट जॉइन के बीच अंतर