PostgreSQLでは、to_date()
を使用できます 文字列を日付に変換する関数。
構文
構文は次のようになります:
to_date(text, text)
ここで、最初の引数は日付の文字列表現であり、2番目の引数は最初の引数が使用するテンプレートを定義します。
例
これがデモンストレーションの基本的な例です。
SELECT to_date('10 Feb 2010', 'DD Mon YYYY');
結果:
2010-02-10
テンプレート
2番目の引数は、最初の引数が提供されるテンプレートを提供します。これは、「フォーマット文字列」と呼ばれることもあります。
テンプレートは、1つ以上のテンプレートパターンと、オプションで1つ以上のテンプレートパターン修飾子で構成されます。
テンプレートパターン
前の例を使用して、DD
テンプレートパターンであり、Mon
テンプレートパターンです。 YYYY
テンプレートパターンでもあります。これらをすべて組み合わせてテンプレートを作成しました。
必要に応じて、各テンプレートパターンを移動できます。また、さまざまなテンプレートパターンを一緒に使用できます。
同じ日付を使用しているが、形式が異なる(したがって、異なるテンプレートを使用している)例をさらにいくつか示します。
\x
SELECT
to_date('10 Feb 2010', 'DD Mon YYYY') AS "DD Mon YYYY",
to_date('Feb 10 2010', 'Mon DD YYYY') AS "Mon DD YYYY",
to_date('10/02/2010', 'DD/MM/YYYY') AS "DD/MM/YYYY",
to_date('02/10/2010', 'MM/DD/YYYY') AS "MM/DD/YYYY",
to_date('02-10-2010', 'MM-DD-YYYY') AS "MM-DD-YYYY",
to_date('02102010', 'MMDDYYYY') AS "MMDDYYYY",
to_date('02-10-10', 'MM-DD-YY') AS "MM-DD-YY";
結果(垂直出力を使用):
DD Mon YYYY | 2010-02-10 Mon DD YYYY | 2010-02-10 DD/MM/YYYY | 2010-02-10 MM/DD/YYYY | 2010-02-10 MM-DD-YYYY | 2010-02-10 MMDDYYYY | 2010-02-10 MM-DD-YY | 2010-02-10
したがって、それらはすべて同じ日付を使用しますが、日付は異なる形式で提供されます。日付が提供されている形式をPostgresに明示的に指定するのはテンプレートの仕事です。
ご想像のとおり、テンプレートを提供しなかった場合、特に日付の形式に異なるロケールが使用されている場合、一部の日付が間違った方法で解釈される可能性があります。
たとえば、2010年1月3日は、ロケールに応じて3月1日または1月3日と解釈できます。
テンプレートパターン修飾子
テンプレートにテンプレートパターン修飾子を追加する必要がある場合もあります。
たとえば、日付に序数のサフィックスが使用されている場合は、そのように解釈されるようにする必要があります。
SELECT
to_date('10th Feb 2010', 'DDth Mon YYYY') AS "10th Feb 2010",
to_date('01st Feb 2010', 'DDth Mon YYYY') AS "01st Feb 2010",
to_date('03rd Feb 2010', 'DDth Mon YYYY') AS "03rd Feb 2010";
結果(垂直出力を使用):
10th Feb 2010 | 2010-02-10 01st Feb 2010 | 2010-02-01 03rd Feb 2010 | 2010-02-03
テンプレートパターン修飾子を使用していなかった場合、それらの日付を使用するとエラーが発生していました。
説明する例を次に示します。
SELECT to_date('10th Feb 2010', 'DD Mon YYYY');
結果:
ERROR: invalid value "th" for "Mon" DETAIL: The given value did not match any of the allowed values for this field.
テンプレートパターンと修飾子の完全なリスト
Postgresには、さらに多くのテンプレートパターンと修飾子が含まれています。
これらは、日付/時刻の値をフォーマットするときにも使用できます(たとえば、to_char()
を使用する場合 タイムスタンプを文字列に変換する関数)。
完全なリストについては、PostgreSQLでの日付/時刻フォーマットのテンプレートパターンと修飾子を参照してください。