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

タイムスタンプデータ型をUNIXタイムスタンプOracleに変換します

    この質問は、UnixtimeをDatetime SQLに変換する(Oracle)の逆です

    ジャスティン洞窟が言うように:

    組み込み関数はありません。しかし、書くのは比較的簡単です。 Unixタイムスタンプは、1970年1月1日からの秒数であるため

    ある日付を別の日付から引くと、それらの間の日数が増えるため、次のようなことができます。

    create or replace function date_to_unix_ts( PDate in date ) return number is
    
       l_unix_ts number;
    
    begin
    
       l_unix_ts := ( PDate - date '1970-01-01' ) * 60 * 60 * 24;
       return l_unix_ts;
    
    end;
    

    のように 1970年以降、小数秒の数は重要ではありません。ただし、タイムスタンプデータ型を使用して呼び出すことはできます...

    SQL> select date_to_unix_ts(systimestamp) from dual;
    
    DATE_TO_UNIX_TS(SYSTIMESTAMP)
    -----------------------------
                       1345801660
    

    あなたのコメントに応えて、申し訳ありませんが、その振る舞いはわかりません:

    SQL> with the_dates as (
      2    select to_date('08-mar-12 01:00:00 am', 'dd-mon-yy hh:mi:ss am') as dt
      3      from dual
      4     union all
      5    select to_date('08-mar-12', 'dd-mon-yy')
      6      from dual )
      7  select date_to_unix_ts(dt)
      8    from the_dates
      9         ;
    
    DATE_TO_UNIX_TS(DT)
    -------------------
             1331168400
             1331164800
    
    SQL>
    

    3,600秒の差、つまり1時間あります。



    1. ORACLEで、最終値がコンマで区切られている2つのテーブルを使用して、複数の行行を1つに結合する方法はありますか?

    2. MySQLで一括挿入を行う方法は?

    3. SQL Serverのテーブル値関数とは何ですか?

    4. データベースの高可用性の比較-MySQL/MariaDBレプリケーションとOracleDataGuard