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

SQL सर्वर में केवल दिनांक के साथ डेटाटाइम की तुलना कैसे करें

इस तरह के काम करने का लालच न करें:

Select * from [User] U where convert(varchar(10),U.DateCreated, 120) = '2014-02-07'

यह एक बेहतर तरीका है:

Select * from [User] U 
where U.DateCreated >= '2014-02-07' and U.DateCreated < dateadd(day,1,'2014-02-07')

देखें:"SARGable" शब्द का वास्तव में क्या अर्थ है?

संपादित करें + डेटा पर फ़ंक्शन के उपयोग से बचने के लिए जहां क्लॉज (या शामिल होने की स्थिति में) 2 मूलभूत कारण हैं।

  1. ज्यादातर मामलों में फ़िल्टर करने या शामिल होने के लिए डेटा पर फ़ंक्शन का उपयोग करने से उस फ़ील्ड पर किसी इंडेक्स तक पहुंचने के लिए ऑप्टिमाइज़र की क्षमता समाप्त हो जाती है, जिससे क्वेरी धीमी (या अधिक "महंगी") हो जाती है
  2. दूसरा, शामिल डेटा की प्रत्येक पंक्ति के लिए कम से कम एक गणना की जा रही है। यह क्वेरी में सैकड़ों, हजारों या कई लाखों गणना जोड़ सकता है ताकि हम 2014-02-07 जैसे एकल मानदंड से तुलना कर सकें . इसके बजाय डेटा के अनुरूप मानदंडों को बदलना कहीं अधिक कुशल है।

"डेटा के अनुरूप मानदंड में संशोधन करना" मेरा वर्णन करने का तरीका है "SARGABLE का उपयोग करें" विधेय"

और दोनों के बीच प्रयोग न करें।

<ब्लॉकक्वॉट>

दिनांक और समय सीमाओं के साथ सबसे अच्छा अभ्यास बीच से बचना है और हमेशा फ़ॉर्म का उपयोग करना है:

जहां col>='20120101' और col <'20120201' यह फ़ॉर्म सभी प्रकारों और सभी सटीकताओं के साथ काम करता है, भले ही समय भाग लागू हो।

http://sqlmag.com/t-sql/t-sql-best-practices-part-2 (इत्ज़िक बेन-गण)



  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 उदाहरण) में 'datetime2' को 'datetime' में बदलें

  2. SQL सर्वर के समतुल्य डेटाबेस दिखाएँ - sp_databases

  3. Sp_reset_connection क्या करता है?

  4. क्या प्राथमिक कुंजी निष्क्रिय हैं?

  5. SP_dbcmptlevel पदावनत होने के बाद SQL सर्वर डेटाबेस संगतता की जाँच कैसे करें?