Oracle डाटाबेस में, TO_TIMESTAMP()
फ़ंक्शन अपने तर्क को TIMESTAMP
. के मान में बदल देता है डेटा प्रकार।
सिंटैक्स
वाक्य रचना इस प्रकार है:
TO_TIMESTAMP(char [ DEFAULT return_value ON CONVERSION ERROR ]
[, fmt [, 'nlsparam' ] ])
char
तर्क कोई भी अभिव्यक्ति हो सकता है जो CHAR
. के वर्ण स्ट्रिंग का मूल्यांकन करता है , VARCHAR2
, NCHAR
, या NVARCHAR2
डेटा प्रकार।
वैकल्पिक fmt
char
. के प्रारूप को निर्दिष्ट करता है . अगर आप fmt
. को छोड़ देते हैं , फिर char
TIMESTAMP
. के डिफ़ॉल्ट प्रारूप में होना चाहिए डेटा प्रकार, जो NLS_TIMESTAMP_FORMAT
. द्वारा निर्धारित किया जाता है इनिशियलाइज़ेशन पैरामीटर (देखें कि अपने Oracle सत्र के दिनांक स्वरूप की जाँच कैसे करें)।
वैकल्पिक 'nlsparam'
तर्क उस भाषा को निर्दिष्ट करता है जिसमें महीने और दिन के नाम और संक्षिप्त रूप दिए गए हैं। यह निम्नलिखित रूप लेता है:
'NLS_DATE_LANGUAGE = language'
उदाहरण
प्रदर्शित करने के लिए यहां एक बुनियादी उदाहरण दिया गया है:
SELECT
TO_TIMESTAMP(
'25-Aug-2030 18:10:35.123456789',
'DD-Mon-RRRR HH24:MI:SS.FF'
)
FROM DUAL;
परिणाम:
25/AUG/30 06:10:35.123456789 PM
परिणाम का प्रारूप आपके सत्र के NLS_TIMESTAMP_FORMAT
द्वारा निर्धारित किया जाता है पैरामीटर। हम NLS_TIMESTAMP_FORMAT
. के मान की जांच कर सकते हैं V$NLS_PARAMETERS
. को क्वेरी करके पैरामीटर देखें:
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_TIMESTAMP_FORMAT';
परिणाम:
DD/MON/RR HH12:MI:SSXFF AM
NLS_TIMESTAMP_FORMAT
. का डिफ़ॉल्ट मान पैरामीटर NLS_TERRITORY
. से लिया गया है पैरामीटर। मेरे मामले में NLS_TERRITORY
पैरामीटर है AUSTRALIA
।
जब मैं NLS_TERRITORY
बदलता हूं, तो यहां बताया गया है दूसरे क्षेत्र के लिए पैरामीटर, फिर TO_TIMESTAMP()
. पर कॉल करें फिर से:
ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
SELECT
TO_TIMESTAMP(
'25-Aug-2030 18:10:35.123456789',
'DD-Mon-RRRR HH24:MI:SS.FF'
)
FROM DUAL;
परिणाम:
25-AUG-30 06.10.35.123456789 PM
इस बार परिणाम एक अलग प्रारूप में लौटाया गया है।
आप वैकल्पिक रूप से NLS_TIMESTAMP_FORMAT
. का मान बदल सकते हैं सीधे पैरामीटर। यह अन्य मापदंडों को प्रभावित किए बिना उस पैरामीटर को बदल देगा। अधिक जानकारी और उदाहरणों के लिए अपने Oracle सत्र में दिनांक स्वरूप कैसे बदलें देखें।
डिफ़ॉल्ट प्रारूप
इस उदाहरण में मैं fmt
. को छोड़ देता हूं तर्क:
SELECT
TO_TIMESTAMP(
'25-AUG-30 06.10.35.123456789 PM'
)
FROM DUAL;
परिणाम:
25-AUG-30 06.10.35.123456789 PM
ऐसा करते समय, तर्क TIMESTAMP
. के डिफ़ॉल्ट स्वरूप में होना चाहिए डेटा प्रकार, जो NLS_TIMESTAMP_FORMAT
. द्वारा निर्धारित किया जाता है आरंभीकरण पैरामीटर।
यहां एक उदाहरण दिया गया है कि क्या होता है जब हम एक मान पास करते हैं जो इस प्रारूप के अनुरूप नहीं है:
DUAL सेSELECT
TO_TIMESTAMP(
'25-Aug-2030 18:10:35.123456789'
)
FROM DUAL;
परिणाम:
ORA-01849: hour must be between 1 and 12 01849. 00000 - "hour must be between 1 and 12" *Cause: *Action:
इस मामले में, मैंने 24 घंटे के समय का उपयोग करने वाला मान पारित किया, लेकिन मेरा NLS_TIMESTAMP_FORMAT
पैरामीटर AM/PM डिज़ाइनर के साथ 12 घंटे की घड़ी निर्दिष्ट करता है।
इसे ठीक करने के लिए, मुझे या तो अपना इनपुट बदलना होगा, या NLS_TIMESTAMP_FORMAT
का मान बदलना होगा पैरामीटर।
रूपांतरण त्रुटि पर एक डिफ़ॉल्ट मान प्रदान करें
तर्क को TIMESTAMP
में बदलने के दौरान त्रुटि होने की स्थिति में आपके पास वापसी के लिए मान प्रदान करने का विकल्प भी होता है टाइप करें।
उदाहरण:
SET NULL 'null';
SELECT
TO_TIMESTAMP(
'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'
उदाहरण
SELECT
TO_TIMESTAMP(
'25-agosto-2030 18:10:35.123456789',
'DD-Month-RRRR HH24:MI:SS.FF',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
परिणाम:
25-AUG-30 06.10.35.123456789 PM
ध्यान दें कि परिणाम अभी भी वर्तमान सत्र के NLS_TIMESTAMP_FORMAT
के अनुसार लौटाया गया है पैरामीटर। बस इतना ही इनपुट एक अलग भाषा में था।
जब मैं agosto
को बदलता हूं तो यह होता है से August
. तक उसी 'nlsparam'
. का उपयोग करते समय मूल्य:
SELECT
TO_TIMESTAMP(
'25-August-2030 18:10:35.123456789',
'DD-Month-RRRR HH24:MI:SS.FF',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
परिणाम:
ORA-01843: not a valid month 01843. 00000 - "not a valid month" *Cause: *Action:
ऐसा इसलिए हुआ क्योंकि मैंने 'nlsparam'
द्वारा निर्दिष्ट भाषा में तारीख प्रदान नहीं की थी तर्क (स्पेनिश)।
इसे English
में बदलना इस समस्या को हल करता है:
SELECT
TO_TIMESTAMP(
'25-August-2030 18:10:35.123456789',
'DD-Month-RRRR HH24:MI:SS.FF',
'NLS_DATE_LANGUAGE = English'
)
FROM DUAL;
परिणाम:
25-AUG-30 06.10.35.123456789 PM
अगर यह मदद करता है तो Oracle में समर्थित भाषाओं की सूची कैसे लौटाएं देखें।
अशक्त तर्क
पासिंग null
परिणाम null
:
SET NULL 'null';
SELECT
TO_TIMESTAMP(null)
FROM DUAL;
परिणाम:
null
अवैध तर्क गणना
कोई तर्क पारित किए बिना फ़ंक्शन को कॉल करने से त्रुटि होती है:
SELECT TO_TIMESTAMP()
FROM DUAL;
परिणाम:
ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action: Error at Line: 8 Column: 8
हालाँकि, बहुत अधिक तर्क पारित करने से कोई समस्या नहीं होती है, जब तक कि पहले तीन मान्य हैं:
SELECT
TO_TIMESTAMP(
'25-Aug-2030 18:10:35.123456789',
'DD-Mon-RRRR HH24:MI:SS.FF',
'NLS_DATE_LANGUAGE = English',
'Oops!',
'Dang!',
'Homer',
'Symptom'
)
FROM DUAL;
परिणाम:
25-AUG-30 06.10.35.123456789 PM