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

YEAR()の例– MySQL

    MySQLでは、YEAR() は、指定された日付式から年を返す組み込みの日付と時刻の関数です。

    1000の範囲の数値として年を返します 9999へ 。日付がゼロの場合、0を返す可能性があります またはNULL sql_modeの値に応じて、警告が表示されます 。

    構文

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

    YEAR(date)

    date 年を取得する日付式です。

    次に例を示します:

    SELECT YEAR('2045-12-10');

    結果:

    2045

    日時の値

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

    SELECT YEAR('2045-12-10 18:52:17');

    結果:

    2045

    ゼロ日付

    MySQLのドキュメントによると、日付がゼロの場合は0になります 。ただし、実際の結果はsql_modeの値によって異なります。 システム変数。

    デフォルトでは、ゼロの日付は許可されていないため、次のように実行するとNULLが生成されます。 警告付き:

    SELECT YEAR('0000-00-00');

    結果:

    +--------------------+
    | YEAR('0000-00-00') |
    +--------------------+
    |               NULL |
    +--------------------+
    1 row in set, 1 warning (0.00 sec)

    そして、ここに警告があります:

    SHOW WARNINGS;

    結果:

    +---------+------+----------------------------------------+
    | Level   | Code | Message                                |
    +---------+------+----------------------------------------+
    | Warning | 1292 | Incorrect datetime value: '0000-00-00' |
    +---------+------+----------------------------------------+

    sql_modeが原因で、この警告が表示されました システム変数にはNO_ZERO_DATEが含まれます およびNO_ZERO_IN_DATE

    SELECT @@SESSION.sql_mode;

    結果:

    ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

    sql_modeをリセットしましょう これらの値なし:

    SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
    SELECT @@SESSION.sql_mode;

    結果:

    ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

    それでは、YEAR()を実行してみましょう。 ゼロの日付で再び機能します:

    SELECT YEAR('0000-00-00');

    結果:

    0

    今回は0を取得します 、ドキュメントに従って。

    NO_ZERO_DATE およびNO_ZERO_IN_DATE 執筆時点では非推奨です。したがって、いつでも削除できます。

    数値日付

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

    例:

    SELECT YEAR(20451210);

    結果:

    2045

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

    SELECT YEAR(451210);

    結果:

    2045

    しかし、それは日付として意味をなさなければなりません。日の部分を無効な日に増やすと、次のようになります。

    SELECT YEAR(20451265);

    結果:

    +----------------+
    | YEAR(20451265) |
    +----------------+
    |           NULL |
    +----------------+
    1 row in set, 1 warning (0.00 sec)

    警告は次のように確認できます:

    SHOW WARNINGS;

    結果:

    +---------+------+--------------------------------------+
    | Level   | Code | Message                              |
    +---------+------+--------------------------------------+
    | Warning | 1292 | Incorrect datetime value: '20451265' |
    +---------+------+--------------------------------------+

    その他の区切り文字

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

    SELECT 
        YEAR('2045/12/10'),
        YEAR('2045,12,10'),
        YEAR('2045:12:10'),
        YEAR('2045;12!10');

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

    YEAR('2045/12/10'): 2045
    YEAR('2045,12,10'): 2045
    YEAR('2045:12:10'): 2045
    YEAR('2045;12!10'): 2045

    現在の日付

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

    SELECT 
        NOW(),
        YEAR(NOW());

    結果:

    +---------------------+-------------+
    | NOW()               | YEAR(NOW()) |
    +---------------------+-------------+
    | 2021-10-17 11:09:23 |        2021 |
    +---------------------+-------------+

    無効な引数

    無効な引数が渡されると、YEAR() nullを返します :

    SELECT YEAR('2030-65-78');

    結果:

    +--------------------+
    | YEAR('2030-65-78') |
    +--------------------+
    |               NULL |
    +--------------------+
    1 row in set, 1 warning (0.00 sec)

    警告を確認してください:

    SHOW WARNINGS;

    結果:

    +---------+------+----------------------------------------+
    | Level   | Code | Message                                |
    +---------+------+----------------------------------------+
    | Warning | 1292 | Incorrect datetime value: '2030-65-78' |
    +---------+------+----------------------------------------+

    引数がありません

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

    SELECT YEAR();

    結果:

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

    そして別の例:

    SELECT YEAR('2030-12-10', '2031-12-10');

    結果:

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

    1. Postgres-隣接リストをネストされたJSONオブジェクトに変換します

    2. SQLで重複する行を削除する方法

    3. ツリービューノードへの画像の割り当て-2

    4. MSSQLServerのセキュリティとアクセス制御に関する未回答の質問