MySQLのSTR_TO_DATE()
この関数を使用すると、さまざまな日付部分から日付値を作成できます。
この関数を使用するときは、さまざまな日付部分の文字列と、日付が提供される形式を指定する2番目の引数を指定します。
構文
構文は次のようになります:
STR_TO_DATE(str,format)
str
は日付部分を含む文字列であり、formatはフォーマット文字列です(str
の方法を決定します 引数はフォーマットされています。
例1-基本的な使用法
実例を示します。
SELECT STR_TO_DATE('31,12,1999','%d,%m,%Y');
結果:
+--------------------------------------+ | STR_TO_DATE('31,12,1999','%d,%m,%Y') | +--------------------------------------+ | 1999-12-31 | +--------------------------------------+
例2–フォーマット文字列の順序
フォーマット文字列は、日付文字列で提供される値と一致する必要があります。たとえば、次のことはできません。
SELECT STR_TO_DATE('31,12,1999','%m,%d,%Y');
結果:
+--------------------------------------+ | STR_TO_DATE('31,12,1999','%m,%d,%Y') | +--------------------------------------+ | NULL | +--------------------------------------+
これが機能しなかった理由は、月の値を31に強制しようとしているためですが、1年に12か月しかないためです。したがって、これは無効な日付値になります。
したがって、この関数を使用する場合、特に日の値が12以下の場合は注意が必要です。そうしないと、月と日の値が気付かずに入れ替わってしまう可能性があります。
たとえば、次のようになります。
SELECT STR_TO_DATE('07,12,1999','%d,%m,%Y'), STR_TO_DATE('07,12,1999','%m,%d,%Y');
結果:
+--------------------------------------+--------------------------------------+ | STR_TO_DATE('07,12,1999','%d,%m,%Y') | STR_TO_DATE('07,12,1999','%m,%d,%Y') | +--------------------------------------+--------------------------------------+ | 1999-12-07 | 1999-07-12 | +--------------------------------------+--------------------------------------+
この場合、両方の07
が原因で、前の例のようにNULL値を取得することはありません。 および12
1日でも1か月でもかまいません。
例3–フォーマット文字列の照合
フォーマット文字列が正しい順序であっても、最初の引数で指定された日付部分のフォーマットと一致する必要があります。
したがって、たとえば、これを行うことはできません:
SELECT STR_TO_DATE('31 Dec, 1999','%d,%m,%Y');
結果:
+----------------------------------------+ | STR_TO_DATE('31 Dec, 1999','%d,%m,%Y') | +----------------------------------------+ | NULL | +----------------------------------------+
この場合、次のようなことを行う必要があります:
SELECT STR_TO_DATE('31 Dec, 1999','%d %M, %Y');
結果:
+-----------------------------------------+ | STR_TO_DATE('31 Dec, 1999','%d %M, %Y') | +-----------------------------------------+ | 1999-12-31 | +-----------------------------------------+
例4– GET_FORMAT()関数の使用
GET_FORMAT()
を渡すこともできます 2番目の引数として機能します。
これが例です。
SELECT STR_TO_DATE('12.07.1999', GET_FORMAT(DATE, 'USA'));
結果:
+----------------------------------------------------+ | STR_TO_DATE('12.07.1999', GET_FORMAT(DATE, 'USA')) | +----------------------------------------------------+ | 1999-12-07 | +----------------------------------------------------+
例5–日時の値
この関数を使用して、時刻または日時の値を返すこともできます。
日時の値を使用した例を次に示します。
SELECT STR_TO_DATE('31/12/1999 09:30:17','%d/%m/%Y %H:%i:%s');
結果:
+--------------------------------------------------------+ | STR_TO_DATE('31/12/1999 09:30:17','%d/%m/%Y %H:%i:%s') | +--------------------------------------------------------+ | 1999-12-31 09:30:17 | +--------------------------------------------------------+
フォーマット文字列指定子
フォーマット文字列では、次の指定子を使用できます。これらに加えて、フォーマット文字列でリテラル文字列を使用することもできます。
指定子 | 説明 |
---|---|
%a | 省略された平日の名前(Sun ..Sat ) |
%b | 省略された月の名前(Jan .. Dec ) |
%c | 月、数値(0 .. 12 ) |
%D | 英語のサフィックスが付いた月の日(0th 、1st 、2nd 、3rd 、…) |
%d | 曜日、数値(00 .. 31 ) |
%e | 曜日、数値(0 .. 31 ) |
%f | マイクロ秒(000000 .. 999999 ) |
%H | 時間(00 .. 23 ) |
%h | 時間(01 .. 12 ) |
%I | 時間(01 .. 12 ) |
%i | 分、数値(00 .. 59 ) |
%j | 年の日(001 .. 366 ) |
%k | 時間(0 .. 23 ) |
%l | 時間(1 .. 12 ) |
%M | 月の名前(January ..December ) |
%m | 月、数値(00 .. 12 ) |
%p | AM またはPM |
%r | 時間、12時間(hh:mm:ss 続いてAM またはPM ) |
%S | 秒(00 .. 59 ) |
%s | 秒(00 .. 59 ) |
%T | 時間、24時間(hh:mm:ss ) |
%U | 週(00 .. 53 )、ここで日曜日は週の最初の日です。 WEEK() モード0 |
%u | 週(00 .. 53 )、ここで月曜日は週の最初の日です。 WEEK() モード1 |
%V | 週(01 .. 53 )、ここで日曜日は週の最初の日です。 WEEK() モード2; %X で使用 |
%v | 週(01 .. 53 )、ここで月曜日は週の最初の日です。 WEEK() モード3; %x で使用 |
%W | 平日の名前(Sunday ..Saturday ) |
%w | 曜日(0 =日曜日..6 =土曜日) |
%X | 日曜日が週の最初の日である週の年、数値、4桁。 %V で使用 |
%x | 週の年。月曜日は週の最初の日で、数値は4桁です。 %v で使用 |
%Y | 年、数値、4桁 |
%y | 年、数値(2桁) |
%% | リテラル% キャラクター |
% | x 、任意の「x 」は上記にリストされていません |