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