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

Oracle SQL में तिथियों की तुलना करना

31-DEC-95 स्ट्रिंग नहीं है, न ही 20-JUN-94 . है . वे अंत में जोड़े गए कुछ अतिरिक्त सामान के साथ संख्याएं हैं। यह '31-DEC-95' होना चाहिए या '20-JUN-94' - एकल उद्धरण पर ध्यान दें, ' . यह आपको एक स्ट्रिंग तुलना करने में सक्षम करेगा।

हालांकि, आप एक स्ट्रिंग तुलना नहीं कर रहे हैं; आप तारीख की तुलना कर रहे हैं . आपको अपनी स्ट्रिंग को डेट में बदलना चाहिए। या तो अंतर्निहित TO_DATE() . का उपयोग करके समारोह, या एक तारीख शाब्दिक।

TO_DATE()

select employee_id
  from employee
 where employee_date_hired > to_date('31-DEC-95','DD-MON-YY')

इस विधि में कुछ अनावश्यक नुकसान हैं

  • जैसा कि a_horse_with_no_name ने टिप्पणियों में उल्लेख किया है, DEC , जरूरी नहीं कि दिसंबर का मतलब है। यह आपके NLS_DATE_LANGUAGE . पर निर्भर करता है और NLS_DATE_FORMAT समायोजन। यह सुनिश्चित करने के लिए कि किसी भी लोकेल में काम के साथ आपकी तुलना आप डेटाटाइम प्रारूप मॉडल MM . का उपयोग कर सकते हैं इसके बजाय
  • वर्ष '95 सटीक नहीं है। आप जानते हैं कि आपका मतलब 1995 है, लेकिन क्या होगा अगर यह '50' था, क्या वह 1950 या 2050 है? मुखर होना हमेशा सर्वोत्तम होता है
select employee_id
  from employee
 where employee_date_hired > to_date('31-12-1995','DD-MM-YYYY')

तिथि अक्षर

एक तिथि शाब्दिक एएनएसआई मानक का हिस्सा है, जिसका अर्थ है कि आपको ओरेकल विशिष्ट फ़ंक्शन का उपयोग करने की आवश्यकता नहीं है। शाब्दिक प्रयोग करते समय आपको जरूरी YYYY-MM-DD . प्रारूप में अपनी तिथि निर्दिष्ट करें और आप एक समय तत्व शामिल नहीं कर सकते।

select employee_id
  from employee
 where employee_date_hired > date '1995-12-31'

याद रखें कि Oracle दिनांक डेटाटाइप में एक समय तत्व शामिल है, इसलिए बिना किसी समय भाग के दिनांक 1995-12-31 00:00:00 के बराबर है ।

यदि आप एक समय भाग शामिल करना चाहते हैं तो आपको टाइमस्टैम्प अक्षर का उपयोग करना होगा, जो प्रारूप लेता है YYYY-MM-DD HH24:MI:SS[.FF0-9]

select employee_id
  from employee
 where employee_date_hired > timestamp '1995-12-31 12:31:02'

अधिक जानकारी

NLS_DATE_LANGUAGE NLS_LANGUAGE . से लिया गया है और NLS_DATE_FORMAT NLS_TERRITORY . से लिया गया है . ये तब सेट होते हैं जब आपने शुरू में डेटाबेस बनाया था लेकिन इन्हें आपकी इनिअलाइज़ेशन पैरामीटर फ़ाइल को बदलकर बदला जा सकता है - केवल अगर वास्तव में आवश्यक हो - या सत्र स्तर पर ALTER SESSION का उपयोग करके वाक्य - विन्यास। उदाहरण के लिए:

alter session set nls_date_format = 'DD.MM.YYYY HH24:MI:SS';

इसका मतलब है:

  • DD महीने का अंकीय दिन, 1 - 31
  • MM वर्ष का अंकीय महीना, 01 - 12 (जनवरी 01 है)
  • YYYY 4 अंकीय वर्ष - मेरी राय में यह हमेशा है 2 अंकों के वर्ष से बेहतर YY क्योंकि इसमें कोई भ्रम नहीं है कि आप किस सदी की बात कर रहे हैं।
  • HH24 दिन का घंटा, 0 - 23
  • MI घंटे का मिनट, 0 - 59
  • SS मिनट का दूसरा, 0-59

V$NLS_PARAMETERSs को क्वेरी करके आप अपनी वर्तमान भाषा और दिनांक भाषा सेटिंग का पता लगा सकते हैं और V$NLS_VALID_VALUES को क्वेरी करके मान्य मानों की पूरी श्रृंखला ।

आगे पढ़ना

  • मॉडल प्रारूपित करें

संयोग से, यदि आप count(*) . चाहते हैं आपको employee_id . के आधार पर समूह बनाना होगा

select employee_id, count(*)
  from employee
 where employee_date_hired > date '1995-12-31'
 group by employee_id

यह आपको प्रति . की गिनती देता है employee_id



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle क्लाउड प्लेटफ़ॉर्म पर Oracle डेटाबेस 12c के साथ Oracle JDeveloper 12c का उपयोग करना, भाग 3

  2. ORA-28001:पासवर्ड की समय सीमा समाप्त हो गई है

  3. अपरिभाषित फ़ंक्शन पर कॉल करें oci_connect, php_oci8_12c.dll, windows 8.1, php5.6.6

  4. Oracle फास्ट रिकवरी एरिया

  5. Oracle स्ट्रीम में लक्ष्य स्कीमा पर ड्रॉप टेबल को रोकना