sql >> データベース >  >> RDS >> PostgreSQL

to_date()がPostgreSQLでどのように機能するか

    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での日付/時刻フォーマットのテンプレートパターンと修飾子を参照してください。


    1. SQL Server(T-SQL)で照合を見つける方法

    2. PostgreSQLでのisnumeric()

    3. SQLServerでの延期可能な制約

    4. 適切なデータベースパフォーマンス監視ツールを使用していますか?