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