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

MySQLのSTR_TO_DATE()関数に無効な文字列を渡すとどうなる?NULLと警告の挙動を解説

STR_TO_DATE()関数に無効な文字列を渡した場合の挙動

STR_TO_DATE()関数に無効な文字列を引数として渡すと、MySQLは結果としてNULLを返し、それと同時に警告(Warning)を出力します。以下に具体的な例を示します。

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

NULLが返される理由

上記のクエリでは、フォーマット指定子 %d に対応する「日」の値が32となっています。しかし、どの月にも32日という日は存在しないため、この文字列は無効な日付と判断されます。その結果、関数はNULLを返し、以下のような警告メッセージが記録されます。

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

まとめ

このように、STR_TO_DATE()関数は入力文字列が指定されたフォーマットに対して不正な場合でも、クエリ自体をエラーで中断させることはありません。代わりにNULLを返しつつ、エラーコード1411の警告を記録します。実務では SHOW WARNINGS コマンドで警告内容を確認し、変換前に入力データの妥当性を検証しておくことが推奨されます。

  1. MySQLのINTERVAL()関数とは?構文と戻り値の仕組みを実例付きで解説

    MySQLのINTERVAL()関数は、第1引数とそれ以降の複数の引数を比較し、「第1引数より大きい値」が最初に現れる位置(インデックス)を返す関数です。複数の閾値と一度に大小比較を行いたい場合などに活用できます。 INTERVAL()関数の構文 INTERVAL(N, N1, N2, N3, …) この関数は、第1引数であるNを、残りの引数であるN1、N2、N3…と順番に比較していきます。すべての引数は整数として扱われ、比較結果に応じて以下のような値を返します。 N < N1 の場合 → 0 を返す N < N2 の場合 → 1 を返す N < N3 の場合 → 2

  2. ビット値が1でも最初の文字列がNULLの場合、MySQLのMAKE_SET()関数は何を返す?

    MySQLのMAKE_SET()関数におけるNULL文字列の扱いMySQLのMAKE_SET()関数は、指定されたビット値に基づいて複数の文字列からセットを構築して返す関数です。ただし、ビットの値が1であっても、そのビットに対応する文字列がNULLである場合、関数はその文字列を結果に含めず、何も返しません(空の結果となります)。動作の仕組みMAKE_SET()関数では、第1引数のビット値によってどの文字列を選択するかが決まります。最下位ビット(値1)は最初の文字列に、次のビット(値2)は2番目の文字列に、というように各ビットが順番に対応しています。そして、選択対象となった文字列がNULLだった