खोज…


बिना समय घटक के साथ दिनांक उत्पन्न करना

सभी DATE समय घटक है; हालाँकि, यह उन तिथियों को संग्रहीत करने के लिए प्रथागत है जिन्हें समय / मिनट / सेकंड के साथ समय की जानकारी को शून्य (यानी मध्यरात्रि) पर सेट करने की आवश्यकता नहीं है।

ANSI DATE शाब्दिक का उपयोग करें ( ISO 8601 दिनांक प्रारूप का उपयोग करके):

SELECT DATE '2000-01-01' FROM DUAL;

TO_DATE() का उपयोग करके इसे स्ट्रिंग शाब्दिक से बदलें:

SELECT TO_DATE( '2001-01-01', 'YYYY-MM-DD' ) FROM DUAL;

( दिनांक प्रारूप मॉडल पर अधिक जानकारी ओरेकल प्रलेखन में पाई जा सकती है।)

या:

SELECT TO_DATE(
         'January 1, 2000, 00:00 A.M.',
         'Month dd, YYYY, HH12:MI A.M.',
         'NLS_DATE_LANGUAGE = American'
       )
FROM   DUAL;

(यदि आप भाषा के विशिष्ट शब्द जैसे महीने के नाम परिवर्तित कर रहे हैं, तो TO_DATE() फ़ंक्शन के लिए 3 nlsparam पैरामीटर को शामिल करना और भाषा को अपेक्षित रूप से निर्दिष्ट करना अच्छा है।)

एक समय घटक के साथ दिनांक बनाना

TO_DATE() का उपयोग करके इसे स्ट्रिंग शाब्दिक से बदलें:

SELECT TO_DATE( '2000-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS' ) FROM DUAL;

या TIMESTAMP शाब्दिक का उपयोग करें:

CREATE TABLE date_table(
  date_value DATE
);

INSERT INTO date_table ( date_value ) VALUES ( TIMESTAMP '2000-01-01 12:00:00' );

ओरेकल एक तालिका के DATE कॉलम में इसे संग्रहीत करते समय एक DATE को TIMESTAMP को निहित करेगा; हालाँकि, आप स्पष्ट रूप से CAST() DATE का मान:

SELECT CAST( TIMESTAMP '2000-01-01 12:00:00' AS DATE ) FROM DUAL;

एक तारीख का प्रारूप

Oracle में DATE डेटा प्रकार का प्रारूप नहीं होता है; जब ओरेकल एक भेजता है DATE क्लाइंट प्रोग्राम को (SQL / साथ ही, एसक्यूएल / डेवलपर, टॉड, जावा, अजगर, आदि) यह 7- या 8 बाइट्स जो तारीख प्रतिनिधित्व करते हैं भेज देंगे।

एक DATE जो किसी तालिका में संग्रहीत नहीं है (अर्थात SYSDATE द्वारा जनरेट किया SYSDATE और DUMP() कमांड का उपयोग करते समय "टाइप 13" है जिसमें 8-बाइट्स हैं और संरचना है (दाईं ओर की संख्याएं 2012-11-26 16:41:09 का आंतरिक प्रतिनिधित्व हैं) 2012-11-26 16:41:09 ):

BYTE VALUE                           EXAMPLE
---- ------------------------------- --------------------------------------
1    Year modulo 256                 220
2    Year multiples of 256           7   (7 * 256 + 220 = 2012)
3    Month                           11
4    Day                             26
5    Hours                           16
6    Minutes                         41
7    Seconds                         9
8    Unused                          0

एक DATE जो एक तालिका में संग्रहीत है ("टाइप 12" जब DUMP() कमांड का उपयोग करते हुए) 7-बाइट्स होते हैं और इसमें संरचना होती है (दाईं ओर संख्याएं 2012-11-26 16:41:09 के आंतरिक प्रतिनिधित्व हैं 2012-11-26 16:41:09 ):

BYTE VALUE                           EXAMPLE
---- ------------------------------- --------------------------------------
1    ( Year multiples of 100 ) + 100 120
2    ( Year modulo 100 ) + 100       112 ((120-100)*100 + (112-100) = 2012)
3    Month                           11
4    Day                             26
5    Hours + 1                       17
6    Minutes + 1                     42
7    Seconds + 1                     10

यदि आप चाहते हैं कि तिथि एक विशिष्ट प्रारूप हो तो आपको इसे किसी ऐसी चीज़ में बदलना होगा जिसका प्रारूप (यानी एक स्ट्रिंग) है। SQL क्लाइंट ऐसा कर सकता है या आप TO_CHAR( date, format_model, nls_params ) का उपयोग करके स्पष्ट रूप से मान को स्ट्रिंग में बदल सकते हैं।

एक स्ट्रिंग के लिए तिथियाँ परिवर्तित

TO_CHAR( date [, format_model [, nls_params]] ) उपयोग करें TO_CHAR( date [, format_model [, nls_params]] )

(ध्यान दें: यदि एक प्रारूप मॉडल प्रदान नहीं किया गया है, तो NLS_DATE_FORMAT सत्र पैरामीटर का उपयोग डिफ़ॉल्ट प्रारूप मॉडल के रूप में किया जाएगा; यह हर सत्र के लिए अलग हो सकता है, इसलिए इस पर भरोसा नहीं किया जाना चाहिए। यह प्रारूप मॉडल को हमेशा निर्दिष्ट करने के लिए अच्छा अभ्यास है।)

CREATE TABLE table_name (
  date_value DATE
);

INSERT INTO table_name ( date_value ) VALUES ( DATE '2000-01-01' );
INSERT INTO table_name ( date_value ) VALUES ( TIMESTAMP '2016-07-21 08:00:00' );
INSERT INTO table_name ( date_value ) VALUES ( SYSDATE );

फिर:

SELECT TO_CHAR( date_value, 'YYYY-MM-DD' ) AS formatted_date FROM table_name;

आउटपुट:

FORMATTED_DATE
--------------
2000-01-01
2016-07-21
2016-07-21

तथा:

SELECT TO_CHAR(
         date_value,
         'FMMonth d yyyy, hh12:mi:ss AM',
         'NLS_DATE_LANGUAGE = French'
       ) AS formatted_date
FROM   table_name;

आउटपुट:

FORMATTED_DATE
-----------------------------
Janvier   01 2000, 12:00:00 AM
Juillet   21 2016, 08:00:00 AM
Juillet   21 2016, 19:08:31 PM

डिफ़ॉल्ट दिनांक स्वरूप मॉडल सेट करना

जब Oracle TO_CHAR() रूप से DATE से एक स्ट्रिंग या इसके विपरीत (या जब TO_CHAR() या TO_DATE() को स्पष्ट रूप से एक प्रारूप मॉडल के बिना कहा जाता है) में NLS_DATE_FORMAT हो जाता है, तो NLS_DATE_FORMAT सत्र पैरामीटर का उपयोग रूपांतरण प्रारूप में प्रारूप मॉडल के रूप में किया जाएगा। यदि शाब्दिक प्रारूप मॉडल से मेल नहीं खाता है, तो एक अपवाद उठाया जाएगा।

आप इस पैरामीटर की समीक्षा कर सकते हैं:

SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT';

आप अपने वर्तमान सत्र के भीतर इस मान को सेट कर सकते हैं:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

(नोट: यह किसी भी अन्य उपयोगकर्ताओं के लिए मूल्य नहीं बदलता है।)

यदि आप TO_DATE() या TO_CHAR() में प्रारूप मुखौटा प्रदान करने के लिए NLS_DATE_FORMAT पर भरोसा करते हैं, तो आपको आश्चर्यचकित नहीं होना चाहिए कि जब आपके प्रश्न इस मूल्य को कभी बदलते हैं तो वे टूट जाते हैं।

SQL / Plus या SQL डेवलपर प्रदर्शन दिनांक कैसे परिवर्तित करें

जब एसक्यूएल / प्लस या एसक्यूएल डेवलपर तारीखों को प्रदर्शित करते हैं, तो वे डिफ़ॉल्ट तिथि प्रारूप मॉडल का उपयोग करके स्ट्रिंग में एक अंतर्निहित रूपांतरण करेंगे ( डिफ़ॉल्ट तिथि प्रारूप मॉडल उदाहरण सेटिंग देखें)।

आप बदल सकते हैं कि NLS_DATE_FORMAT पैरामीटर को बदलकर एक तिथि कैसे प्रदर्शित की जाती है।

तिथि अंकगणित - दिन, घंटे, मिनट और / या सेकंड में तिथियों के बीच अंतर

ओरेकल में, दो DATE s के बीच अंतर (दिनों और / या अंशों में) घटाव का उपयोग करके पाया जा सकता है:

SELECT DATE '2016-03-23' - DATE '2015-12-25' AS difference FROM DUAL;

दो तिथियों के बीच दिनों की संख्या को आउटपुट करता है:

DIFFERENCE
----------
        89

तथा:

SELECT TO_DATE( '2016-01-02 01:01:12', 'YYYY-MM-DD HH24:MI:SS' )
         - TO_DATE( '2016-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS' )
         AS difference
FROM   DUAL

दो दिनों के बीच दिनों के अंश को आउटपुट करता है:

DIFFERENCE
----------
    1.0425

इस संख्या को क्रमशः 24 , 24*60 या 24*60*60 से गुणा करके घंटे, मिनट या सेकंड में अंतर पाया जा सकता है।

पिछले उदाहरण को दो तिथियों के बीच दिन, घंटे, मिनट और सेकंड प्राप्त करने के लिए बदला जा सकता है:

SELECT TRUNC( difference                       ) AS days,
       TRUNC( MOD( difference * 24,       24 ) ) AS hours,
       TRUNC( MOD( difference * 24*60,    60 ) ) AS minutes,
       TRUNC( MOD( difference * 24*60*60, 60 ) ) AS seconds
FROM   (
  SELECT TO_DATE( '2016-01-02 01:01:12', 'YYYY-MM-DD HH24:MI:SS' )
         - TO_DATE( '2016-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS' )
         AS difference
  FROM   DUAL

);

(नोट: TRUNC() का उपयोग FLOOR() बजाय नकारात्मक अंतरों को सही ढंग से संभालने के लिए किया जाता है।)

आउटपुट:

DAYS HOURS MINUTES SECONDS
---- ----- ------- -------
   1     1       1      12

पिछले उदाहरण को NUMTODSINTERVAL() का उपयोग करके संख्यात्मक अंतर को अंतराल में परिवर्तित करके भी हल किया जा सकता है:

SELECT EXTRACT( DAY    FROM difference ) AS days,
       EXTRACT( HOUR   FROM difference ) AS hours,
       EXTRACT( MINUTE FROM difference ) AS minutes,
       EXTRACT( SECOND FROM difference ) AS seconds
FROM   (
  SELECT NUMTODSINTERVAL(
           TO_DATE( '2016-01-02 01:01:12', 'YYYY-MM-DD HH24:MI:SS' )
             - TO_DATE( '2016-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS' ),
           'DAY'
         ) AS difference
  FROM   DUAL
);

तिथि अंकगणित - महीनों या वर्षों में तिथियों के बीच का अंतर

MONTHS_BETWEEN( date1, date2 ) का उपयोग करके दो तिथियों के बीच के महीनों में अंतर पाया जा सकता है:

SELECT MONTHS_BETWEEN( DATE '2016-03-10', DATE '2015-03-10' ) AS difference FROM DUAL;

आउटपुट:

DIFFERENCE
----------
        12

यदि अंतर में भाग के महीने शामिल हैं तो यह महीने के उस हिस्से को लौटा देगा, जिसके आधार पर प्रत्येक महीने में 31 दिन होंगे:

SELECT MONTHS_BETWEEN( DATE '2015-02-15', DATE '2015-01-01' ) AS difference FROM DUAL;

आउटपुट:

DIFFERENCE
----------
 1.4516129

MONTHS_BETWEEN प्रति माह 31 दिन MONTHS_BETWEEN कारण जब प्रति माह कम दिन हो सकते हैं, तो इसके परिणामस्वरूप विभिन्न अंतर हो सकते हैं, जो महीनों के बीच की सीमाओं को MONTHS_BETWEEN

उदाहरण:

SELECT MONTHS_BETWEEN( DATE'2016-02-01', DATE'2016-02-01' - INTERVAL '1' DAY ) AS "JAN-FEB",
       MONTHS_BETWEEN( DATE'2016-03-01', DATE'2016-03-01' - INTERVAL '1' DAY ) AS "FEB-MAR",
       MONTHS_BETWEEN( DATE'2016-04-01', DATE'2016-04-01' - INTERVAL '1' DAY ) AS "MAR-APR",
       MONTHS_BETWEEN( DATE'2016-05-01', DATE'2016-05-01' - INTERVAL '1' DAY ) AS "APR-MAY"
FROM   DUAL;

आउटपुट:

JAN-FEB FEB-MAR MAR-APR APR-MAY
------- ------- ------- -------
0.03226 0.09677 0.03226 0.06452

महीनों के अंतर को 12 से विभाजित करके वर्षों में अंतर पाया जा सकता है।

वर्ष, महीना, दिन, घंटा, मिनट या दिनांक के दूसरे घटक निकालें

वर्ष, माह या दिन एक के घटकों DATE डेटा प्रकार का उपयोग कर पाया जा सकता है EXTRACT( [ YEAR | MONTH | DAY ] FROM datevalue )

SELECT EXTRACT (YEAR  FROM DATE '2016-07-25') AS YEAR,
       EXTRACT (MONTH FROM DATE '2016-07-25') AS MONTH,
       EXTRACT (DAY   FROM DATE '2016-07-25') AS DAY
FROM DUAL;

आउटपुट:

YEAR MONTH DAY
---- ----- ---
2016     7  25

समय (घंटा, मिनट या दूसरा) घटक या तो मिल सकते हैं:

उदाहरण के लिए:

SELECT EXTRACT( HOUR   FROM CAST( datetime AS TIMESTAMP ) ) AS Hours,
       EXTRACT( MINUTE FROM CAST( datetime AS TIMESTAMP ) ) AS Minutes,
       EXTRACT( SECOND FROM CAST( datetime AS TIMESTAMP ) ) AS Seconds
FROM   (
  SELECT TO_DATE( '2016-01-01 09:42:01', 'YYYY-MM-DD HH24:MI:SS' ) AS datetime FROM DUAL
);

आउटपुट:

HOURS MINUTES SECONDS
----- ------- -------
    9      42       1

समय क्षेत्र और डेलाइट बचत समय

DATE डेटा प्रकार, समय क्षेत्र या दिन की बचत समय में परिवर्तन को नहीं संभालता है।

कोई एक:

एक DATE को समन्वित यूनिवर्सल टाइम (UTC) के रूप में संग्रहीत किया जा सकता है और वर्तमान सत्र समय क्षेत्र में इस तरह परिवर्तित किया जा सकता है:

SELECT FROM_TZ(
         CAST(
           TO_DATE( '2016-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS' )
           AS TIMESTAMP
         ),
         'UTC'
       )
       AT LOCAL AS time
FROM   DUAL;

यदि आप ALTER SESSION SET TIME_ZONE = '+01:00'; फिर आउटपुट है:

TIME
------------------------------------
2016-01-01 13:00:00.000000000 +01:00

और ALTER SESSION SET TIME_ZONE = 'PST'; फिर आउटपुट है:

TIME
------------------------------------
2016-01-01 04:00:00.000000000 PST

लीप सेकंड

ओरेकल लीप सेकंड को हैंडल नहीं करता है । अधिक जानकारी के लिए मेरा ओरेकल सपोर्ट नोट 2019397.2 और 730795.1 देखें।

सप्ताह का दिन हो रहा है

सप्ताह के दिन प्राप्त करने के लिए आप TO_CHAR( date_value, 'D' ) का उपयोग कर सकते हैं।

हालाँकि, यह NLS_TERRITORY सत्र पैरामीटर पर निर्भर है:

ALTER SESSION SET NLS_TERRITORY = 'AMERICA';        -- First day of week is Sunday
SELECT TO_CHAR( DATE '1970-01-01', 'D' ) FROM DUAL;

आउटपुट 5

ALTER SESSION SET NLS_TERRITORY = 'UNITED KINGDOM'; -- First day of week is Monday
SELECT TO_CHAR( DATE '1970-01-01', 'D' ) FROM DUAL;

आउटपुट 4

NLS सेटिंग्स के इस स्वतंत्र करने के लिए, आप वर्तमान दिन की मध्यरात्रि (दिन के किसी भी अंश को हटाने के लिए) को काट सकते हैं और वर्तमान आइसो-सप्ताह (जो हमेशा सोमवार से शुरू होता है) की शुरुआत में काटे गए दिनांक को घटा सकते हैं:

SELECT TRUNC( date_value ) - TRUNC( date_value, 'IW' ) + 1 FROM DUAL


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow