PostgreSQL: format interval as minutes - 詳細解説
PostgreSQL で間隔を分数としてフォーマットする方法
INTERVAL
データ型を分数としてフォーマットするには、TO_CHAR()
関数を使用します。この関数は、INTERVAL
データ型を指定された形式の文字列に変換します。
分数としてフォーマットする例
次の例は、INTERVAL
データ型を分数としてフォーマットする方法を示しています。
SELECT to_char(interval '1 hour 30 minutes', 'P%M');
このクエリは、1 時間 30 分
の間隔を 1.5h
という文字列に変換します。
使用できるフォーマット
TO_CHAR()
関数は、INTERVAL
データ型をフォーマットするためにさまざまなフォーマット文字列を使用できます。使用できるフォーマット文字列の詳細については、PostgreSQL のドキュメントを参照してください。
その他のヒント
TO_CHAR()
関数は、INTERVAL
データ型だけでなく、他のデータ型もフォーマットするために使用できます。INTERVAL
データ型をフォーマットするために、EXTRACT()
関数を使用することもできます。この関数は、INTERVAL
データ型から特定の単位の値を抽出します。
PostgreSQL で間隔を分数としてフォーマットするサンプルコード
サンプル 1: 単位を指定してフォーマット
SELECT to_char(interval '1 hour 30 minutes', 'P%M');
出力:
1.5h
サンプル 2: 複数の単位を指定してフォーマット
このサンプルコードでは、INTERVAL
データ型を 2 日 12 時間 30 分
という単位で分数としてフォーマットします。
SELECT to_char(interval '2 days 12 hours 30 minutes', 'P%MDH');
2.5d
サンプル 3: 小数点以下を指定してフォーマット
SELECT to_char(interval '1 hour 30 minutes', 'P%Mf2');
1.50h
サンプル 4: 前置ゼロを指定してフォーマット
SELECT to_char(interval '2 days 12 hours 30 minutes', 'P02D0H0M');
02.00d0H30m
サンプル 5: カスタムフォーマット文字列を使用してフォーマット
SELECT to_char(interval '1 hour 30 minutes', 'My custom format: P%MH%m');
My custom format: 1H30m
説明
これらのサンプルコードは、PostgreSQL で INTERVAL
データ型を分数としてフォーマットする方法を示しています。さまざまなフォーマット文字列を使用して、ニーズに合った形式でフォーマットすることができます。
補足
- サンプルコードは、PostgreSQL 14.2 で動作確認しています。
- 他の PostgreSQL バージョンでは、動作が異なる場合があります。
- 詳細については、PostgreSQL のドキュメントを参照してください。
PostgreSQL で間隔を分数としてフォーマットするその他の方法
EXTRACT() 関数と数値フォーマット
EXTRACT()
関数を使用して、INTERVAL
データ型から特定の単位の値を抽出し、数値フォーマットを使用してその値を分数としてフォーマットすることができます。
例:
SELECT
EXTRACT(HOUR FROM interval '1 hour 30 minutes') || '.' ||
EXTRACT(MINUTE FROM interval '1 hour 30 minutes') AS formatted_interval;
1.5
SUBSTRING()
関数を使用して、TO_CHAR()
関数によって生成された文字列から分数部分を取り出し、数値フォーマットを使用してその値を分数としてフォーマットすることができます。
SELECT
SUBSTRING(to_char(interval '1 hour 30 minutes', 'P%M'), 2) AS formatted_interval;
1.5
CASE
式を使用して、INTERVAL
データ型の値に基づいて異なるフォーマット文字列を適用することができます。
SELECT
CASE
WHEN interval '1 hour 30 minutes' < interval '1 day' THEN
to_char(interval '1 hour 30 minutes', 'P%MH%m')
ELSE
to_char(interval '1 hour 30 minutes', 'P%MDH')
END AS formatted_interval;
1.5h
留意点
- 上記の方法は、
TO_CHAR()
関数を使用する方法よりも柔軟性が高く、複雑なフォーマットを作成することができます。 - ただし、これらの方法は
TO_CHAR()
関数よりも処理速度が遅くなる場合があります。 - どの方法を使用するかは、ニーズとパフォーマンス要件に応じて決定する必要があります。
PostgreSQL で間隔を分数としてフォーマットするには、さまざまな方法があります。ニーズとパフォーマンス要件に応じて、最適な方法を選択してください。
postgresql