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

MariaDBでのCONVERT_TZ()のしくみ

    MariaDBでは、CONVERT_TZ() は、日時値をあるタイムゾーンから別のタイムゾーンに変換する組み込みの日時関数です。

    関数を呼び出すときは、3つの引数を渡します。時間、変換するタイムゾーン 、およびからに変換するタイムゾーン 。

    構文

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

    CONVERT_TZ(dt,from_tz,to_tz)

    dt 日時式、from_tz からに変換するタイムゾーンです 、およびto_tz からに変換するタイムゾーンです 。

    次に例を示します:

    SELECT CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00');

    結果:

    +-------------------------------------------------------+
    | CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00') |
    +-------------------------------------------------------+
    | 2021-05-10 11:00:00                                   |
    +-------------------------------------------------------+

    ここでは、元のタイムゾーンは+00:00であり、+ 10:00に変換しました。

    別の開始タイムゾーンを使用すると、次のようになります。

    SELECT CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00');

    結果:

    +-------------------------------------------------------+
    | CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00') |
    +-------------------------------------------------------+
    | 2021-05-10 08:00:00                                   |
    +-------------------------------------------------------+

    名前付きタイムゾーン

    名前付きのタイムゾーンを使用できますが、これにはさまざまなタイムゾーンテーブルがロードされている必要があります。

    タイムゾーンテーブルがない場合は次のようになります。 設定済み:

    SELECT 
    CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');

    結果:

    +-------------------------------------------------------------+
    | CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') |
    +-------------------------------------------------------------+
    | NULL                                                        |
    +-------------------------------------------------------------+

    結果はnullです 、タイムゾーンテーブルにタイムゾーンデータがないためです。

    これも同じクエリですが、今回はタイムゾーンテーブルのデータを使用しています:

    SELECT 
    CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');

    結果:

    +-------------------------------------------------------------+
    | CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') |
    +-------------------------------------------------------------+
    | 2021-05-10 13:45:00                                         |
    +-------------------------------------------------------------+

    範囲外の日時値

    値がサポートされているTIMESTAMPの範囲外の場合、変換は行われません。 範囲('1970-01-01 00:00:01' to '2038-01-19 05:14:07' UTC)from_tz UTCへ。

    例:

    SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00');

    結果:

    +-------------------------------------------------------+
    | CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00') |
    +-------------------------------------------------------+
    | 2040-05-10 01:00:00                                   |
    +-------------------------------------------------------+

    無効な引数

    いずれかの引数が無効な場合は、CONVERT_TZ() nullを返します 。

    例:

    SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00');

    結果:

    +-------------------------------------------------------+
    | CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00') |
    +-------------------------------------------------------+
    | NULL                                                  |
    +-------------------------------------------------------+

    この場合、日時式を無効なタイムゾーン(+90:00)に変換しようとしました )、したがってnull 返されました。

    ヌル引数

    引数がnullの場合 、結果はnullです :

    SELECT 
        CONVERT_TZ(null, '+00:00', '+90:00') AS "1",
        CONVERT_TZ('2021-05-10 01:00:00', null, '+90:00') AS "2",
        CONVERT_TZ('2021-05-10 01:00:00', '+00:00', null) AS "3";

    結果:

    +------+------+------+
    | 1    | 2    | 3    |
    +------+------+------+
    | NULL | NULL | NULL |
    +------+------+------+

    引数がありません

    CONVERT_TZ()を呼び出す 引数の数が間違っているか、引数を渡さないと、エラーが発生します:

    SELECT CONVERT_TZ();

    結果:

    ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONVERT_TZ'

    1. MySQL GREATEST()関数–引数のリストから最大の引数を検索します

    2. ORA-12557 TNS:プロトコル・アダプタをロードできません

    3. 別の表領域を使用してクエリから表を作成する(Oracle SQL)

    4. SQL Serverで外部キーの依存関係を見つける方法は?