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

STR_TO_DATE()関数に渡した日付文字列とフォーマット文字列が一致しない場合、MySQLは何を返すのか?

フォーマット文字列と日付文字列が一致しない場合のMySQLの動作

MySQLのSTR_TO_DATE()関数において、指定されたフォーマット文字列と引数として渡された日付文字列が一致しない場合、MySQLはNULL値を戻り値として返し、同時に警告(Warning)を出力します。以下に具体的な例を示します。

例1:区切り文字の不一致

mysql> Select STR_TO_DATE('20172810', '%Y,%d%m');
+------------------------------------+
| STR_TO_DATE('20172810', '%Y,%d%m') |
+------------------------------------+
| NULL                               |
+------------------------------------+
1 row in set, 1 warning (0.00 sec)

上記のクエリがNULLを返した理由は、フォーマット文字列の%Yの後にカンマ(,)が含まれているのに対し、日付文字列「20172810」の「2017」の後にはカンマが存在しないためです。この不一致により、日付を正しく解析できずNULLが返されます。

警告内容の確認

SHOW WARNINGSコマンドを実行すると、出力された警告の詳細を確認できます。

mysql> Show Warnings\G
*************************** 1. row ***************************
Level: Warning
Code: 1411
Message: Incorrect datetime value: '20172810' for function str_to_date
1 row in set (0.00 sec)

警告コード1411として、str_to_date関数に対して不正な日時の値が渡されたことを示すメッセージが表示されます。

例2:日付単位の順序の不一致

同様に、フォーマット文字列内の日付単位(年・月・日など)の順序が、実際の日付文字列の順序と異なる場合も、MySQLは同じようにNULLと警告を返します。

mysql> Select STR_TO_DATE('20172810', '%d%m%Y');
+-----------------------------------+
| STR_TO_DATE('20172810', '%d%m%Y') |
+-----------------------------------+
| NULL                              |
+-----------------------------------+
1 row in set, 1 warning (0.00 sec)

この例では、フォーマット文字列では「日・月・年」の順に指定されている一方、日付文字列は「年・月・日」の順になっているため、両者が一致せずNULLが返されます。

mysql> Show Warnings\G
*************************** 1. row ***************************
Level: Warning
Code: 1411
Message: Incorrect datetime value: '20172810' for function str_to_date
1 row in set (0.00 sec)

まとめ

STR_TO_DATE()関数を使用する際は、フォーマット文字列の区切り文字や日付単位の順序が、渡す日付文字列と完全に一致している必要があります。一致しない場合はNULLが返され、警告コード1411の警告が出力されるため、日付文字列とフォーマット指定子の対応関係を必ず確認しましょう。

  1. MySQLのSTR_TO_DATE関数で日付形式を変換する方法

    はじめにMySQLでは、STR_TO_DATE()関数を使用することで、文字列として保存された日付データを正しい日付形式に変換できます。本記事では、varchar型のカラムに保存された「月-日-年 時:分:秒」形式の日付文字列を、標準的な日時形式へ変換する手順を解説します。サンプルテーブルの作成まず、日付をvarchar型(文字列)で保存するテーブルを作成します。mysql> create table DemoTable(DueDate varchar(100));Query OK, 0 rows affected (0.78 sec)レコードの挿入INSERTコマンドを使って、テーブル

  2. MySQLのDATE_FORMAT()とSTR_TO_DATE()を使って日付をフォーマットする方法

    はじめにMySQLでは、STR_TO_DATE()関数とDATE_FORMAT()関数を組み合わせることで、「August 04,2019」のような文字列として保存された日付を「2019-08-04」のような標準的な形式(YYYY-MM-DD)に変換できます。各関数の役割は以下の通りです。STR_TO_DATE(): 指定したフォーマットに従って文字列をDATE型に変換するDATE_FORMAT(): 日付の値を指定したフォーマットの文字列に整形するそれでは、実際の手順を見ていきましょう。手順1:テーブルを作成するまず、サンプル用のテーブルを作成します。mysql> create tab