31-DEC-95एक तार नहीं है, न ही है 20-JUN-94। वे अंत में जोड़े गए कुछ अतिरिक्त सामानों के साथ संख्या में हैं। यह होना चाहिए '31-DEC-95'या '20-JUN-94'- एकल उद्धरण पर ध्यान दें '। यह आपको एक स्ट्रिंग तुलना करने में सक्षम करेगा।
हालाँकि, आप एक स्ट्रिंग तुलना नहीं कर रहे हैं; आप एक तारीख तुलना कर रहे हैं । आपको अपनी स्ट्रिंग को डेट में बदलना चाहिए। या तो अंतर्निहित 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')
दिनांक शाब्दिक
डेट शाब्दिक ANSI मानक का हिस्सा है, जिसका अर्थ है कि आपको Oracle विशिष्ट फ़ंक्शन का उपयोग करने की आवश्यकता नहीं है। शाब्दिक का उपयोग करते समय आपको प्रारूप में अपनी तिथि निर्दिष्ट करनी चाहिएYYYY-MM-DD और आप समय तत्व को शामिल नहीं कर सकते।
select employee_id
from employee
where employee_date_hired > date '1995-12-31'
याद रखें कि ओरेकल डेट डेटाइप में एक टाइम इलेमेंट शामिल है, इसलिए बिना टाइम पार्ट के तारीख समान है 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सिंटैक्स का उपयोग करके सत्रीय स्तर पर - केवल अपनी inialization पैरामीटर्स फ़ाइल को बदलकर बदला जा सकता है । उदाहरण के लिए:
alter session set nls_date_format = 'DD.MM.YYYY HH24:MI:SS';
इसका मतलब है की:
DD महीने का सांख्यिक दिन, 1 - 31
MM वर्ष का सांख्यिक महीना, 01 - 12 (जनवरी 01 है)
YYYY4 अंक वर्ष - मेरी राय में यह हमेशा 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।
> <या तो उपयोग कर सकते हैं याBETWEEN '' AND ''