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

TO_DATE() Oracle में फ़ंक्शन

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"

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ऑरैकल डेटाबेस में दिनांक स्वरूप कैसे बदलें

  2. JDBC का उपयोग करते समय SQL कथनों के लिए लॉगिंग कैसे सक्षम करें

  3. Oracle में न्यूलाइन कैरेक्टर कैसे दर्ज करें?

  4. इनर जॉइन बनाम व्हेयर

  5. Oracle sql:ऑर्डर बाय और अलग क्लॉज