Oracle डाटाबेस में, TO_DATE()
फ़ंक्शन अपने तर्क को DATE
. के मान में बदल देता है डेटा प्रकार।
सिंटैक्स
वाक्य रचना इस प्रकार है:
TO_DATE(char [ DEFAULT return_value ON CONVERSION ERROR ]
[, fmt [, 'nlsparam' ] ])
char
तर्क कोई भी अभिव्यक्ति हो सकता है जो CHAR
. के वर्ण स्ट्रिंग का मूल्यांकन करता है , VARCHAR2
, NCHAR
, या NVARCHAR2
डेटा प्रकार।
वैकल्पिक fmt
char
. के प्रारूप को निर्दिष्ट करता है . अगर आप fmt
. को छोड़ देते हैं , फिर char
डिफ़ॉल्ट दिनांक स्वरूप में होना चाहिए। डिफ़ॉल्ट दिनांक प्रारूप NLS_DATE_FORMAT
. द्वारा निर्धारित किया जाता है इनिशियलाइज़ेशन पैरामीटर, जो स्वयं परोक्ष रूप से NLS_TERRITORY
. द्वारा निर्धारित किया गया है पैरामीटर, लेकिन स्पष्ट रूप से सेट भी किया जा सकता है (देखें कि अपने Oracle सत्र के दिनांक स्वरूप की जांच कैसे करें)।
वैकल्पिक 'nlsparam'
तर्क उस भाषा को निर्दिष्ट करता है जिसमें महीने और दिन के नाम और संक्षिप्त रूप दिए गए हैं। यह निम्नलिखित रूप लेता है:
'NLS_DATE_LANGUAGE = language'
उदाहरण
प्रदर्शित करने के लिए यहां एक बुनियादी उदाहरण दिया गया है:
DUAL सेSELECT
TO_DATE(
'25-Aug-2030',
'DD-Mon-RRRR'
)
FROM DUAL;
परिणाम:
25/AUG/30
परिणाम का प्रारूप आपके सत्र के NLS_DATE_FORMAT
. द्वारा निर्धारित किया जाता है पैरामीटर। हम NLS_DATE_FORMAT
. के मान की जांच कर सकते हैं V$NLS_PARAMETERS
. को क्वेरी करके पैरामीटर देखें:
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
परिणाम:
DD/MON/RR
NLS_TIMESTAMP_FORMAT
. का डिफ़ॉल्ट मान पैरामीटर NLS_TERRITORY
. से लिया गया है पैरामीटर। मेरे मामले में NLS_TERRITORY
पैरामीटर है AUSTRALIA
।
जब मैं NLS_TERRITORY
बदलता हूं, तो यहां बताया गया है दूसरे क्षेत्र के लिए पैरामीटर, फिर TO_TIMESTAMP()
. पर कॉल करें फिर से:
ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
SELECT
TO_DATE(
'25-Aug-2030',
'DD-Mon-RRRR'
)
FROM DUAL;
परिणाम:
25-AUG-30
इस बार परिणाम एक अलग प्रारूप में लौटाया गया है।
आप वैकल्पिक रूप से NLS_TIMESTAMP_FORMAT
. का मान बदल सकते हैं सीधे पैरामीटर। यह अन्य मापदंडों को प्रभावित किए बिना उस पैरामीटर को बदल देगा। अधिक जानकारी और उदाहरणों के लिए अपने Oracle सत्र में दिनांक स्वरूप कैसे बदलें देखें।
डिफ़ॉल्ट प्रारूप
इस उदाहरण में मैं fmt
. को छोड़ देता हूं तर्क:
SELECT
TO_DATE(
'25-AUG-30'
)
FROM DUAL;
परिणाम:
25-AUG-30
ऐसा करते समय, तर्क DATE
. के डिफ़ॉल्ट स्वरूप में होना चाहिए डेटा प्रकार, जो NLS_DATE_FORMAT
. द्वारा निर्धारित किया जाता है आरंभीकरण पैरामीटर।
यहां एक उदाहरण दिया गया है कि क्या होता है जब हम एक मान पास करते हैं जो इस प्रारूप के अनुरूप नहीं है:
SELECT
TO_DATE(
'2030-08-25'
)
FROM DUAL;
परिणाम:
Error report - ORA-01861: literal does not match format string
इसे ठीक करने के लिए, मुझे या तो अपना इनपुट बदलना होगा, या NLS_DATE_FORMAT
का मान बदलना होगा पैरामीटर।
प्रारूप मॉडल को छोड़ना आम तौर पर अच्छा अभ्यास नहीं है। दूसरे शब्दों में, इस फ़ंक्शन का उपयोग करते समय हमेशा एक प्रारूप मॉडल प्रदान करना अच्छा अभ्यास है। यहां डेटाटाइम प्रारूप तत्वों की पूरी सूची दी गई है जिनका उपयोग प्रारूप मॉडल का निर्माण करते समय किया जा सकता है।
रूपांतरण त्रुटि पर एक डिफ़ॉल्ट मान प्रदान करें
आपके पास उस स्थिति में वापस जाने के लिए एक मान प्रदान करने का विकल्प भी होता है जब तर्क को DATE
में परिवर्तित करते समय कोई त्रुटि होती है टाइप करें।
उदाहरण:
SET NULL 'null';
SELECT
TO_DATE(
'Oops!'
DEFAULT null ON CONVERSION ERROR
)
FROM DUAL;
परिणाम:
null
इस मामले में मैंने निर्दिष्ट किया है कि null
जब भी कोई रूपांतरण त्रुटि होती है तो उसे वापस कर दिया जाना चाहिए।
डिफ़ॉल्ट रूप से, SQLcl और SQL*Plus जब भी null
. खाली स्थान लौटाते हैं SQL SELECT
. के परिणामस्वरूप होता है बयान।
हालांकि, आप SET NULL
. का उपयोग कर सकते हैं वापस करने के लिए एक अलग स्ट्रिंग निर्दिष्ट करने के लिए। यहाँ मैंने निर्दिष्ट किया है कि स्ट्रिंग null
लौटाया जाना चाहिए।
द 'nlsparam'
तर्क
वैकल्पिक 'nlsparam'
तर्क उस भाषा को निर्दिष्ट करता है जिसमें महीने और दिन के नाम और संक्षिप्त रूप दिए गए हैं। यह निम्नलिखित रूप लेता है:
'NLS_DATE_LANGUAGE = language'
उदाहरण
DUAL सेSELECT
TO_DATE(
'25-agosto-2030',
'DD-Month-RRRR',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
परिणाम:
25-AUG-30
ध्यान दें कि परिणाम अभी भी वर्तमान सत्र के NLS_DATE_FORMAT
के अनुसार लौटाया गया है पैरामीटर। बस इतना ही इनपुट एक अलग भाषा में था।
जब मैं agosto
को बदलता हूं तो यह होता है से August
. तक उसी 'nlsparam'
. का उपयोग करते समय मूल्य:
SELECT
TO_DATE(
'25-August-2030',
'DD-Month-RRRR',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
परिणाम:
Error report - ORA-01843: not a valid month
ऐसा इसलिए हुआ क्योंकि मैंने 'nlsparam'
द्वारा निर्दिष्ट भाषा में तारीख प्रदान नहीं की थी तर्क (स्पेनिश)।
इसे English
में बदलना इस समस्या को हल करता है:
SELECT
TO_DATE(
'25-August-2030',
'DD-Month-RRRR',
'NLS_DATE_LANGUAGE = English'
)
FROM DUAL;
परिणाम:
25-AUG-30
अगर यह मदद करता है तो Oracle में समर्थित भाषाओं की सूची कैसे लौटाएं देखें।
अशक्त तर्क
पासिंग null
परिणाम null
:
SET NULL 'null';
SELECT
TO_DATE(null)
FROM DUAL;
परिणाम:
null
अवैध तर्क गणना
कोई तर्क पारित किए बिना फ़ंक्शन को कॉल करने से त्रुटि होती है:
SELECT TO_DATE()
FROM DUAL;
परिणाम:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
और बहुत अधिक तर्क देने से भी त्रुटि होती है:
SELECT
TO_DATE(
'25-Aug-2030',
'DD-Mon-RRRR',
'NLS_DATE_LANGUAGE = English',
'Gosh',
'Dang'
)
FROM DUAL;
परिणाम:
SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function"