sql >> データベース >  >> RDS >> Oracle

OracleのデフォルトのDATE形式

    DATE 形式はありません。内部には、年(2バイト)と月、日、時、分、秒(それぞれ1バイト)を表す7バイトとして格納されます。

    '25-JAN-18' 日付ではありません-テキストリテラルです。

    行う場合:

    INSERT INTO table_name ( date_column ) VALUES ( '25-JAN-18' );
    

    Oracleは、NLS_DATE_FORMATを使用して、文字列から日付への暗黙的なキャストを支援し、実行しようとします。 フォーマットモデルとしてのユーザーセッションのパラメータ。したがって、ステートメントは暗黙的に次のように変換されます。

    INSERT INTO table_name ( date_column ) VALUES (
      TO_DATE(
        '25-JAN-18',
        ( SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT' )
      )
    );
    

    すべてのユーザーが自分のセッションでNLSパラメータを設定できます(したがって、絶対にしないでください) 各ユーザーは自分のセッションに対して異なる設定を持ち、セッションの途中で値を変更できるため、暗黙的な変換に依存します)。代わりに、次のことを行う必要があります:

    • 日付リテラルを使用する:

      DATE '2018-01-25'
      
    • タイムスタンプリテラルを使用する

      TIMESTAMP '2018-01-25 01:23:45'
      
    • TO_DATE( date_string, format_string [, nls_values] )を使用します フォーマットモデルを明示的に使用します:

      TO_DATE( '25-JUN-18', 'DD-MON-RR' )
      

    NLS_DATE_FORMATを変更したい場合 セッションでは、次を使用できます:

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

    デフォルトの日付形式は何ですか?

    DATE以降 フォーマットがないので、この質問は意味がありません。代わりに、私たちが尋ねた場合:

    デフォルトのNLS_DATE_FORMATは何ですか Oracleが文字列と日付の間で変換するために使用するセッションパラメータ?

    NLS_TERRITORYによって異なります セッションパラメータ(つまり、世界のどこにいるかによって異なります):

    SET SERVEROUTPUT ON;
    
    VARIABLE cur REFCURSOR;
    
    DECLARE
      territories SYS.ODCIVARCHAR2LIST;
      formats     SYS.ODCIVARCHAR2LIST := SYS.ODCIVARCHAR2LIST();
    BEGIN
      select value
      BULK COLLECT INTO territories
      from v$nls_valid_values
      where parameter = 'TERRITORY'
      order by value;
    
      formats.EXTEND( territories.COUNT );
      FOR i IN 1 .. territories.COUNT LOOP
        EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_TERRITORY='''||territories(i)||'''';
    
        SELECT value
        INTO   formats(i)
        FROM   NLS_SESSION_PARAMETERS
        WHERE  PARAMETER = 'NLS_DATE_FORMAT';
      END LOOP;
    
      OPEN :cur FOR
      SELECT CAST( f.format AS VARCHAR2(12) ) AS format,
             LISTAGG( t.territory, ', ' ) WITHIN GROUP ( ORDER BY t.territory ) AS territories
      FROM   ( SELECT ROWNUM AS rn, COLUMN_VALUE AS territory FROM TABLE( territories ) ) t
             INNER JOIN
             ( SELECT ROWNUM AS rn, COLUMN_VALUE AS format FROM TABLE( formats ) ) f
             ON ( f.rn = t.rn )
      GROUP BY f.format;
    END;
    /
    
    PRINT :cur;
    

    日付形式とその形式に対応する地域のリストを出力します:

    FORMAT       TERRITORIES
    ------------ ------------------------------------------------------------------
    DD MON RRRR  THAILAND
    DD-MM-RR     ALGERIA, BAHRAIN, INDIA, MOROCCO, THE NETHERLANDS, TUNISIA
    DD-MM-RRRR   BANGLADESH, INDONESIA, ROMANIA, VIETNAM
    DD-MON-RR    AMERICA, CHINA, HONG KONG, IRELAND, ITALY, PAKISTAN, TAIWAN,
                 UNITED KINGDOM
    DD-MON-RRRR  ISRAEL
    DD.MM.RR     AUSTRIA, BELARUS, CIS, CROATIA, CZECH REPUBLIC, CZECHOSLOVAKIA,
                 GERMANY, RUSSIA, SLOVAKIA, SLOVENIA, SWITZERLAND
    DD.MM.RRRR   ALBANIA, AZERBAIJAN, ESTONIA, FINLAND, FYR MACEDONIA, ICELAND,
                 KAZAKHSTAN, MACEDONIA, NORWAY, SERBIA AND MONTENEGRO, UKRAINE,
                 YUGOSLAVIA
    DD.MM.RRRR.  MONTENEGRO, SERBIA
    DD.fmMM.RRRR ARMENIA
    DD/MM/RR     AFGHANISTAN, BELGIUM, BRAZIL, CAMEROON, CATALONIA, CHILE, COLOMBIA,
                 CONGO BRAZZAVILLE, CONGO KINSHASA, COSTA RICA, CYPRUS, DJIBOUTI,
                 EGYPT, EL SALVADOR, FRANCE, GABON, GREECE, GUATEMALA, HONDURAS,
                 IRAQ, IVORY COAST, JORDAN, KUWAIT, LEBANON, LIBYA, LUXEMBOURG,
                 MAURITANIA, MEXICO, NEW ZEALAND, NICARAGUA, OMAN, PANAMA, PERU,
                 PUERTO RICO, QATAR, SAUDI ARABIA, SINGAPORE, SOMALIA, SPAIN, SUDAN,
                 SYRIA, UNITED ARAB EMIRATES, URUGUAY, VENEZUELA, YEMEN
    DD/MM/RRRR   ARGENTINA, BAHAMAS, BERMUDA, ECUADOR, MALAYSIA, SENEGAL, TURKEY,
                 UGANDA, ZAMBIA
    DD/MON/RR    AUSTRALIA, SOUTH AFRICA, UZBEKISTAN
    DD/fmMM/RRRR LAOS, NIGERIA
    MM/DD/RRRR   PHILIPPINES
    RR-MM-DD     CANADA, DENMARK, JAPAN
    RR-MON-DD    HUNGARY
    RR.MM.DD     PORTUGAL
    RR/MM/DD     KOREA, POLAND
    RRRR-MM-DD   BULGARIA, SWEDEN
    RRRR-fmMM-DD CAMBODIA
    RRRR.MM.DD   LATVIA, LITHUANIA
    RRRR/fmMM/fm IRAN, SRI LANKA
    fmDD-MM-RR   BOLIVIA
    fmDD/MM/RR   PARAGUAY
    fmDD/MM/RRRR BELIZE, ETHIOPIA, MALTA, NEPAL
    fmDD/fmMM/RR MALDIVES
    fmMM.DD.RRRR BOSNIA AND HERZEGOVINA
    fmMM/DD/RRRR KENYA, TANZANIA
    


    1. MySQLの2つの日付の違い

    2. Forループを使用してOracleでカーソルからデータをフェッチする方法

    3. OracleDeveloperVMを使用して学習およびテストするための事前構築されたOracleデータベース

    4. メッセージを楽しむ