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

OracleのFROM_TZ()関数

    Oracle Databaseでは、FROM_TZ() 関数は、タイムスタンプ値とタイムゾーンをTIMESTAMP WITH TIME ZONEに変換します 値。

    タイムスタンプ値とタイムゾーンを2つの別個の引数として渡すと、関数はそれらを TIMESTAMP WITH TIME ZONEとして返します。 値。

    構文

    構文は次のようになります:

    FROM_TZ(timestamp_value, time_zone_value)

    timestamp_valueの場所 はタイムスタンプであり、 time_zone_value 'TZH:TZM'の形式の文字列です または、TZRで文字列を返す文字式 オプションのTZD フォーマット。

    次に例を示します:

    SELECT 
        FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
    FROM DUAL;

    結果:

    01/JAN/30 12:30:35.000000000 PM -04:00

    タイムゾーンリージョンの指定

    タイムゾーンオフセットの代わりにタイムゾーンリージョンを使用する例を次に示します。

    SELECT 
        FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
    FROM DUAL;

    結果:

    01/JAN/30 12:30:35.000000000 PM AMERICA/ST_KITTS

    タイムゾーンの変更

    AT LOCALを使用できます またはAT TIME ZONE 結果のタイムスタンプを別のタイムゾーンに変更する句。

    例:

    SELECT 
        FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
        AT TIME ZONE 'Asia/Bangkok'
    FROM DUAL;

    結果:

    01/JAN/30 11:30:35.000000000 PM ASIA/BANGKOK

    そして、ここではAT LOCALを使用しています :

    SELECT 
        FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
        AT LOCAL
    FROM DUAL;

    結果:

    02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE

    SESSIONTIMEZONEを使用できます 現在のセッションのタイムゾーンを確認する関数、およびDBTIMEZONE データベースのタイムゾーンを確認します。

    無効なタイムゾーン

    無効なタイムゾーンを渡すと、エラーが発生します:

    SELECT 
        FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover')
    FROM DUAL;

    結果:

    Error starting at line : 1 in command -
    SELECT 
        FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover')
    FROM DUAL
    Error report -
    ORA-01882: timezone region not found
    >

    V$TIMEZONE_NAMESにクエリを実行すると、有効なタイムゾーンリージョンのリストを取得できます。 ビュー。

    許容範囲外のタイムゾーンオフセットを指定すると、次のようになります。

    SELECT 
        FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00')
    FROM DUAL;

    結果:

    Error starting at line : 1 in command -
    SELECT 
        FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00')
    FROM DUAL
    Error report -
    ORA-01874: time zone hour must be between -15 and 15

    ヌル引数

    nullを渡す 最初の引数の場合、エラーが発生します:

    SET NULL 'null';
    SELECT 
        FROM_TZ(null, '+10:00')
    FROM DUAL;

    結果:

    Error starting at line : 1 in command -
    SELECT 
        FROM_TZ(null, '+10:00')
    FROM DUAL
    Error at Command Line : 2 Column : 13
    Error report -
    SQL Error: ORA-00932: inconsistent datatypes: expected TIMESTAMP got CHAR
    00932. 00000 -  "inconsistent datatypes: expected %s got %s"
    *Cause:    
    *Action:

    nullを渡す 2番目の引数はnullを返します :

    SET NULL 'null';
    SELECT 
        FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', null)
    FROM DUAL;

    結果:

    null

    デフォルトでは、SQLclとSQL*Plusはnullの場合は常に空白を返すことに注意してください。 SQL SELECTの結果として発生します 声明。

    ただし、SET NULLは使用できます 返される別の文字列を指定します。上記の例では、文字列nullを指定しました 返却する必要があります。

    引数の数が無効です

    無効な数の引数を渡すと、エラーが発生します:

    SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35')
    FROM DUAL;

    結果:

    Error starting at line : 1 in command -
    SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35')
    FROM DUAL
    Error at Command Line : 1 Column : 8
    Error report -
    SQL Error: ORA-00909: invalid number of arguments
    00909. 00000 -  "invalid number of arguments"
    *Cause:    
    *Action:

    1. SQL Server(T-SQL)のdatetime2値にタイムゾーンオフセットを追加する

    2. 同じINSERT中の別の列のシリアル列の参照値

    3. SqlCommandを使用して、パラメーター化されたデータベース名でデータベースを作成するにはどうすればよいですか?

    4. SQLServerのID列の増分値を返します