PostgreSQLのドキュメントによると、to_timestamp()
と呼ばれる2つの関数があります。 :
- Unixエポックをタイムスタンプに変換します。 Unixエポックは、1970-01-01 00:00:00+00からの秒数です。
- もう1つは、文字列をタイムスタンプに変換します。
具体的には、各関数は値をタイムゾーン付きのタイムスタンプに変換します。 値。
Postgresのドキュメントでは、それらを2つの別個のto_timestamp()
として示していますが 関数、私はそれらを1つまたは2つの引数を受け入れる1つの関数であるかのように提示します。
構文
to_timestamp()
を使用できます 次の方法で:
to_timestamp(double precision)
to_timestamp(text, text)
最初の構文を使用すると、引数は倍精度として提供されます。 値であり、タイムスタンプに変換する倍精度のエポック値です。
2番目の構文を使用すると、最初の引数は日付で、2番目の引数はフォーマット文字列です。
Unixエポックを変換する
エポックをタイムスタンプに変換する方法を示す基本的な例を次に示します。
SELECT to_timestamp(1658792421);
結果:
2022-07-26 09:40:21+10
私の場合、タイムゾーンオフセットは+10なので、それが返されます。
フラクショナル秒
これが小数秒の例です。
SELECT to_timestamp(1658792421.123456);
結果:
2022-07-26 09:40:21.123456+10
フォーマット
2番目の構文を使用して日付値をフォーマットする例を次に示します。
SELECT to_timestamp('21 Oct 2022', 'DD Mon YYYY');
結果:
2022-10-21 00:00:00+10
2番目の引数は、最初の引数がどのようにフォーマットされるかを示すために提供されています。
この点をさらに説明するための別の形式を次に示します。
SELECT to_timestamp('21/10/2022', 'DD/MM/YYYY');
結果:
2022-10-21 00:00:00+10
2番目の引数の形式が最初の引数の形式と一致しない場合、エラーが発生する可能性があります。
例:
SELECT to_timestamp('21 October 2022', 'DD Mon YYYY');
結果:
ERROR: invalid value "ober" for "YYYY" DETAIL: Value must be an integer.
フォーマット文字列(2番目の引数)は、オプションの修飾子を使用した任意のテンプレートパターンにすることができます。
この関数で使用できるテンプレートパターンと修飾子の完全なリストは次のとおりです。
リターンタイプ
前述のように、戻りの種類はタイムゾーン付きのタイムスタンプです。 。これはpg_typeof()
で確認できます 機能。
SELECT pg_typeof(to_timestamp(1658792421.123456));
結果:
timestamp with time zone
日付パーツの抽出
さまざまな方法を使用して、タイムスタンプ値から日付部分を抽出できます。
たとえば、extract()
を使用できます 機能。
SELECT extract('month' from to_timestamp(1658792421));
結果:
7
また、to_char()
を使用できます 次のようなことをする必要がある場合に機能します。月番号の代わりに月名を表示します。
SELECT to_char(to_timestamp(1658792421), 'Month');
結果:
July
そして、ここではフォーマット構文を使用しています。
SELECT to_char(to_timestamp('1st Oct 2022', 'FMDDth Mon YYYY'), 'Month');
結果:
October
月番号しかない場合は、次の例を使用して月番号を月名に変換できます。
SELECT to_char(to_timestamp(3::text, 'MM'), 'Month');
結果:
March
逆もまた同様です(月の名前を月の番号に変換します)。
次の例では、date_part()
を使用して月番号を抽出します。 extract()
の代わりとして 。
SELECT date_part('month', (to_timestamp('Mar 2022', 'Mon')));
結果:
3