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

Oracleのdump(systimestamp)バイトの意味

    表面的には似ているが内部的には異なるさまざまな日時データ型があります。 systimestamp タイプ188です(タイムゾーン情報があります)。タイムスタンプリテラルは、タイムゾーン情報のないタイプ187であり、タイムゾーン情報のあるタイプ188です。プレーンなタイムスタンプ列はタイプ180です:

    select dump(systimestamp) from dual;
    
    DUMP(SYSTIMESTAMP)                                                             
    --------------------------------------------------------------------------------
    Typ=188 Len=20: 223,7,7,31,9,50,28,11,128,203,79,35,1,0,5,0,0,0,0,0             
    
    select dump(timestamp '2015-07-31 08:55:06.157047 +00:00') from dual;
    
    DUMP(TIMESTAMP'2015-07-3108:55:06.157047+00:00')              
    ---------------------------------------------------------------
    Typ=188 Len=20: 223,7,7,31,8,55,6,0,216,88,92,9,0,0,5,0,0,0,0,0
    
    select dump(timestamp '2015-07-31 08:55:06.157047') from dual;
    
    DUMP(TIMESTAMP'2015-07-3108:55:06.157047')                    
    ---------------------------------------------------------------
    Typ=187 Len=20: 223,7,7,31,8,55,6,0,216,88,92,9,0,0,3,0,0,0,0,0
    
    create table t (ts timestamp);
    insert into t (ts) values (timestamp '2015-07-31 08:55:06.157047');
    select dump(ts) from t;
    
    DUMP(TS)                                                                       
    --------------------------------------------------------------------------------
    Typ=180 Len=11: 120,115,7,31,9,56,7,9,92,88,216                                 
    

    これらのうち、タイムスタンプ列のみが、リンクした記事の内部形式を使用し、その年に100を超える表記を使用します。

    その他の場合、最初のバイトはベース256修飾子であり、2番目のバイトはベース256年です。したがって、次のように解釈します

    223 + (7 * 256) = 2015
    

    内部ストレージの詳細については、MyOracleSupportドキュメント69028.1を参照してください。それと、コメントにリンクされている以前の回答は、2つの日付タイプを参照していますが、タイムスタンプは秒まで同じように扱われ、残りの一部はタイプ187/188(とにかく秒の小数部)で推測できます。

    Byte 1 - Base 256 year modifier: 223
    2      - Base 256 year: 7 (256 * 7 = 1792 + 223 = 2015)
    3      - Month: 7
    4      - Day: 31
    5      - Hours: 8
    6      - Minutes: 55
    7      - Seconds: 6
    8      - Unused?
    9      - Base 256 nanoseconds: 216
    10     - Base 256 ns modifier 1: 256 * 88 = 22528
    11     - Base 256 ns modifier 2: 256 * 256 * 92 = 6029312
    12     - Base 256 ns modifier 3: 256 * 256 * 256 * 9 = 150994944
               => actual nanoseconds = 216 + 22528 + 6029312 + 150994944 
               => 157047000
    13-20  - Time zone data?
    

    タイプ120の場合、小数秒は同じですが、バイトが逆になります。




    1. PostgreSQL関数呼び出し

    2. MySQLでビューを更新する方法

    3. SQL * Plusは、SQLDeveloperが実行するSQLスクリプトを実行しません

    4. Oracle 11g Express Edition for Windows 64ビット?