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

MariaDBでのTIMESTAMPDIFF()のしくみ

    MariaDBでは、TIMESTAMPDIFF() は、2つの日時式の差を返す組み込みの日時関数です。

    構文

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

    TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

    unit は次のいずれかの値です:

    • MICROSECOND
    • SECOND
    • MINUTE
    • HOUR
    • DAY
    • WEEK
    • MONTH
    • QUARTER
    • YEAR

    ユニットには、オプションでSQL_TSI_のプレフィックスを付けることができます。 。

    TIMESTAMPDIFF() datetime_expr2を返します – datetime_expr1

    1つの式は日付で、もう1つの式は日時です。日付値は、00:00:00の時間部分を持つものとして扱われます 必要に応じて。

    デモンストレーションの例を次に示します。

    SELECT TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01');

    結果:

    +------------------------------------------------+
    | TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01') |
    +------------------------------------------------+
    |                                             28 |
    +------------------------------------------------+

    否定的な結果

    日付を切り替えると、否定的な結果が得られます:

    SELECT TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01');

    結果:

    +------------------------------------------------+
    | TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01') |
    +------------------------------------------------+
    |                                            -28 |
    +------------------------------------------------+

    日時の値

    日時の値を渡す例は次のとおりです。

    SELECT TIMESTAMPDIFF(
        HOUR, 
        '2030-02-01 00:00:00', 
        '2030-02-01 12:30:45'
        ) 
    AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    |     12 |
    +--------+

    HOURを指定しました 、したがって、分と秒の部分は無視されます。

    混合タイプ

    日付と日時の両方の値を渡す例を次に示します。

    SELECT TIMESTAMPDIFF(
        HOUR, 
        '2030-02-01', 
        '2030-02-01 12:30:45'
        ) 
    AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    |     12 |
    +--------+

    前述のように、日付値は00:00:00の時間部分を持つものとして扱われます 。

    SQL_TSI_の追加 プレフィックス

    ユニットにはSQL_TSI_を含めることができます 必要に応じてプレフィックス:

    SELECT TIMESTAMPDIFF(
        SQL_TSI_YEAR, 
        '2030-02-01', 
        '2035-02-01'
        )
    AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    |      5 |
    +--------+

    マイクロ秒

    マイクロ秒を返す例を次に示します。

    SELECT TIMESTAMPDIFF(
        MICROSECOND, 
        '2030-02-01 10:30:45.000000',
        '2030-02-01 10:30:45.123456'
        )
    AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    | 123456 |
    +--------+

    日時の値にマイクロ秒が実際に指定されていないものは次のとおりです。

    SELECT TIMESTAMPDIFF(
        MICROSECOND, 
        '2030-02-01 10:30:45',
        '2030-02-01 12:30:45'
        )
    AS Result;

    結果:

    +------------+
    | Result     |
    +------------+
    | 7200000000 |
    +------------+

    現在の日付

    NOW()を渡すことができます 現在の日付と時刻を別の日付と比較するための日時引数の1つ:

    SELECT 
        NOW(),
        TIMESTAMPDIFF(DAY, NOW(), '2021-03-31') AS Diff;

    結果:

    +---------------------+------+
    | NOW()               | Diff |
    +---------------------+------+
    | 2021-05-30 09:29:01 |  -60 |
    +---------------------+------+

    ヌル日付

    日付の1つがnullの場合 、結果はnullです :

    SELECT TIMESTAMPDIFF(
        YEAR, 
        '2030-02-01',
        NULL
        )
    AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    |   NULL |
    +--------+

    引数がありません

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

    SELECT TIMESTAMPDIFF();

    結果:

    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1

    そして別の例:

    SELECT TIMESTAMPDIFF('2020-12-09');

    結果:

    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '10, '2020-12-09')' at line 1

    1. MySQLインデックスはどのように機能しますか?

    2. Mac OSXLionからPostgreSQL9.0.4を完全にアンインストールしますか?

    3. SQL Server(T-SQL)で圧縮を使用してテーブルを作成する

    4. SQL:列の値が前の行から変更された行を選択する