MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQL DATEDIFF()関数で2桁の年値を使う方法をわかりやすく解説

MySQLのDATEDIFF()関数では、引数として渡す日付式の片方だけ、あるいは両方に2桁の年値を使用することができます。

日付式の片方に2桁の年値を使用する例

以下のクエリでは、最初の日付式に2桁の年値を、もう片方の日付式には4桁の年値を使用しています。

mysql> Select DATEDIFF('18-10-22','2017-10-22');
+-----------------------------------+
| DATEDIFF('18-10-22','2017-10-22') |
+-----------------------------------+
|                               365 |
+-----------------------------------+
1 row in set (0.00 sec)

このように、日付式が混在していてもDATEDIFF()関数は正しく日付の差(365日)を計算してくれます。

両方の日付式に2桁の年値を使用する例

次のクエリでは、両方の日付式に2桁の年値を使用しています。

mysql> Select DATEDIFF('18-10-22','17-10-22');
+---------------------------------+
| DATEDIFF('18-10-22','17-10-22') |
+---------------------------------+
|                             365 |
+---------------------------------+
1 row in set (0.00 sec)

結果は前の例と同じく365日となり、2桁の年値同士でも問題なく動作することがわかります。

2桁の年値が解釈されるルール

MySQLでは、2桁の年値は以下のルールに従って変換されます。

  • 00〜69 の範囲 → 2000〜2069年 として解釈される
  • 70〜99 の範囲 → 1970〜1999年 として解釈される

そのため、'18-10-22' は 2018年10月22日、'17-10-22' は 2017年10月22日 として処理され、正確な日付差が算出されます。

ただし、世紀をまたぐ日付を扱う場合には意図しない年として解釈される可能性があるため、実務では4桁の年値を使用することをおすすめします。

  1. MySQLでネストされたトランザクションを扱う方法:SAVEPOINTの使い方を解説

    MySQLでは、SAVEPOINTステートメントを使用することで、擬似的に「ネストされたトランザクション」のような処理を実現できます。MySQLは厳密な意味でのネストされたトランザクションを直接サポートしていませんが、セーブポイントを活用することで、トランザクション内の特定の時点まで部分的にロールバックすることが可能になります。 SAVEPOINTによるネストされたトランザクションの基本手順 全体の流れは以下のとおりです。 テーブルを作成する トランザクションを開始する テーブルにレコードを挿入する SAVEPOINTステートメントで名前付きのセーブポイントを設定する ROLLBACK

  2. MySQLストアドプロシージャで「IF NOT IN」は使える?構文と実装例をわかりやすく解説

    MySQLのストアドプロシージャ内でも、IF NOT IN を使用することができます。NOT IN は、指定した値がリスト内に存在しない場合に TRUE を返す演算子であり、条件分岐と組み合わせることで柔軟な処理を実現できます。IF NOT IN の基本構文まず、MySQLにおける IF NOT IN の基本的な構文を見てみましょう。if(yourVariableName NOT IN (yourValue1,yourValue2,........N) ) then    statement1else    sta