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

MariaDBでのEXTRACT()のしくみ

    MariaDBでは、EXTRACT() は、指定された日付または日時式から指定された単位を返す組み込みの日付と時刻の関数です。

    構文

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

    EXTRACT(unit FROM date)

    unit は有効な日付と時刻の単位であり、date そのユニットを抽出する日付です。

    日付から年を抽出する例を次に示します。

    SELECT EXTRACT(YEAR FROM '2030-12-25');

    結果:

    +---------------------------------+
    | EXTRACT(YEAR FROM '2030-12-25') |
    +---------------------------------+
    |                            2030 |
    +---------------------------------+

    その日を抽出するもう1つの例は次のとおりです。

    SELECT EXTRACT(DAY FROM '2030-12-25');

    結果:

    +--------------------------------+
    | EXTRACT(DAY FROM '2030-12-25') |
    +--------------------------------+
    |                             25 |
    +--------------------------------+

    日時の値

    日時の値でも機能します:

    SELECT EXTRACT(HOUR FROM '2030-02-01 10:30:45');

    結果:

    +------------------------------------------+
    | EXTRACT(HOUR FROM '2030-02-01 10:30:45') |
    +------------------------------------------+
    |                                       10 |
    +------------------------------------------+

    日付と時刻の単位

    日時式の各ユニットを実行する別の例を次に示します。

    SELECT 
        EXTRACT(YEAR FROM '2030-02-01 10:30:45.123456') AS YEAR,
        EXTRACT(MONTH FROM '2030-02-01 10:30:45.123456') AS MONTH,
        EXTRACT(DAY FROM '2030-02-01 10:30:45.123456') AS DAY,
        EXTRACT(HOUR FROM '2030-02-01 10:30:45.123456') AS HOUR,
        EXTRACT(MINUTE FROM '2030-02-01 10:30:45.123456') AS MINUTE,
        EXTRACT(SECOND FROM '2030-02-01 10:30:45.123456') AS SECOND,
        EXTRACT(MICROSECOND FROM '2030-02-01 10:30:45.123456') AS MICROSECOND;

    結果:

    +------+-------+------+------+--------+--------+-------------+
    | YEAR | MONTH | DAY  | HOUR | MINUTE | SECOND | MICROSECOND |
    +------+-------+------+------+--------+--------+-------------+
    | 2030 |     2 |    1 |   10 |     30 |     45 |      123456 |
    +------+-------+------+------+--------+--------+-------------+

    複合ユニット

    複合ユニットを使用する例を次に示します。複合ユニットは、複数の基本時間ユニットで構成されています。

    SELECT EXTRACT(YEAR_MONTH FROM '2030-02-01');

    結果:

    +---------------------------------------+
    | EXTRACT(YEAR_MONTH FROM '2030-02-01') |
    +---------------------------------------+
    |                                203002 |
    +---------------------------------------+

    ゼロユニット

    単位がゼロの場合、0になります 。

    例:

    SELECT 
        EXTRACT(YEAR FROM '0000-00-00 00:00:00.000000') AS YEAR,
        EXTRACT(MONTH FROM '0000-00-00 00:00:00.000000') AS MONTH,
        EXTRACT(DAY FROM '0000-00-00 00:00:00.000000') AS DAY,
        EXTRACT(HOUR FROM '0000-00-00 00:00:00.000000') AS HOUR,
        EXTRACT(MINUTE FROM '0000-00-00 00:00:00.000000') AS MINUTE,
        EXTRACT(SECOND FROM '0000-00-00 00:00:00.000000') AS SECOND,
        EXTRACT(MICROSECOND FROM '0000-00-00 00:00:00.000000') AS MICROSECOND;

    結果:

    +------+-------+------+------+--------+--------+-------------+
    | YEAR | MONTH | DAY  | HOUR | MINUTE | SECOND | MICROSECOND |
    +------+-------+------+------+--------+--------+-------------+
    |    0 |     0 |    0 |    0 |      0 |      0 |           0 |
    +------+-------+------+------+--------+--------+-------------+

    数値日付

    日付として意味がある限り、日付を数値として渡すこともできます。

    SELECT EXTRACT(MONTH FROM 20301125);

    結果:

    +------------------------------+
    | EXTRACT(MONTH FROM 20301125) |
    +------------------------------+
    |                           11 |
    +------------------------------+

    または、次の場合でも(2桁の年を使用):

    SELECT EXTRACT(YEAR FROM 301125);

    結果:

    +---------------------------+
    | EXTRACT(YEAR FROM 301125) |
    +---------------------------+
    |                      2030 |
    +---------------------------+

    ただし、ここでは注意が必要です。MariaDBは基本的に、それが何年かを推測する必要があります。年を30から80に増やすと、次のようになります。

    SELECT EXTRACT(YEAR FROM 801125);

    結果:

    +---------------------------+
    | EXTRACT(YEAR FROM 801125) |
    +---------------------------+
    |                      1980 |
    +---------------------------+

    したがって、この場合、30を渡します 結果として2030 ただし、80を渡す 返された1980

    また、それは日付として意味をなさなければなりません。無効な日を使用するとどうなりますか:

    SELECT EXTRACT(YEAR FROM 20300135);

    結果:

    +-----------------------------+
    | EXTRACT(YEAR FROM 20300135) |
    +-----------------------------+
    |                        NULL |
    +-----------------------------+

    その他の区切り文字

    日付には他の区切り文字を使用できます。 MariaDBは、日付の区切り文字に関しては非常に寛容です。いくつかの有効な例を次に示します。

    SELECT 
        EXTRACT(MONTH FROM '2030/06/25'),
        EXTRACT(MONTH FROM '2030,06,25'),
        EXTRACT(MONTH FROM '2030:06:25'),
        EXTRACT(MONTH FROM '2030;06!25');

    結果(垂直出力を使用):

    EXTRACT(MONTH FROM '2030/06/25'): 6
    EXTRACT(MONTH FROM '2030,06,25'): 6
    EXTRACT(MONTH FROM '2030:06:25'): 6
    EXTRACT(MONTH FROM '2030;06!25'): 6

    現在の日付

    NOW()を渡すことができます 現在の日付を使用する日付引数として:

    SELECT 
        NOW(),
        EXTRACT(MONTH FROM NOW());

    結果:

    +---------------------+---------------------------+
    | NOW()               | EXTRACT(MONTH FROM NOW()) |
    +---------------------+---------------------------+
    | 2021-05-16 10:06:21 |                         5 |
    +---------------------+---------------------------+

    無効な日付

    無効な日付が渡されると、EXTRACT() nullを返します :

    SELECT EXTRACT(YEAR FROM 'Friday');

    結果:

    +-----------------------------+
    | EXTRACT(YEAR FROM 'Friday') |
    +-----------------------------+
    |                        NULL |
    +-----------------------------+

    無効な日付/時刻の単位

    無効な日付/時刻単位が渡されると、EXTRACT() エラーを返します:

    SELECT EXTRACT(DECADE FROM '2030-06-25');

    結果:

    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 'DECADE FROM '2030-06-25')' at line 1

    引数がありません

    EXTRACT()を呼び出す 引数を渡さないとエラーが発生します:

    SELECT EXTRACT();

    結果:

    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

    1. MariaDBでのMINUTE()のしくみ

    2. PostgreSQLで2つの日付間の時系列を生成する

    3. Oracleで科学的記数法で数値をフォーマットする方法

    4. どのバージョンのPostgreSQLを実行していますか?