PostgreSQLで「1 day 01:30:00」のようなインターバルを「25:30:00」に変換する
PostgreSQLでインターバルを時間に変換する方法
問題:
解決策:
PostgreSQLには、インターバルを時間に変換するためのいくつかの関数があります。
date_part() 関数を使用する
date_part()
関数は、インターバルから特定の部分フィールドを抽出します。この場合、hours
と minutes
フィールドを抽出する必要があります。
SELECT date_part('hours', interval '1 day 01:30:00') || ':' || date_part('minutes', interval '1 day 01:30:00');
このクエリは、25:30
という結果を出力します。
to_char() 関数を使用する
to_char()
関数は、日付や時刻を文字列に変換します。この場合、インターバルを HH:MM
形式の文字列に変換する必要があります。
SELECT to_char(interval '1 day 01:30:00', 'HH:MM');
extract() 関数を使用する
SELECT extract(hour from interval '1 day 01:30:00') || ':' || extract(minute from interval '1 day 01:30:00');
PostgreSQLでインターバルを時間に変換するには、date_part()
、to_char()
、extract()
などの関数を使用できます。どの関数を使用するかは、要件と好みによって異なります。
- 上記の例では、1 日と 1 時間 30 分のインターバルを使用しています。他のインターバルを使用する場合は、クエリをそれに応じて変更する必要があります。
-- 1. date_part() 関数を使用する
SELECT date_part('hours', interval '1 day 01:30:00') || ':' || date_part('minutes', interval '1 day 01:30:00');
-- 2. to_char() 関数を使用する
SELECT to_char(interval '1 day 01:30:00', 'HH:MM');
-- 3. extract() 関数を使用する
SELECT extract(hour from interval '1 day 01:30:00') || ':' || extract(minute from interval '1 day 01:30:00');
出力
25:30
25:30
25:30
+
演算子を使用して、インターバルを time
型の値に追加できます。
SELECT interval '1 day 01:30:00' + time '00:00:00';
cast()
関数を使用して、インターバルを time
型に変換できます。
SELECT cast(interval '1 day 01:30:00' as time);
PL/pgSQL 関数を使用する
PL/pgSQL 関数を使用して、インターバルを時間に変換する独自のロジックを実装できます。
CREATE FUNCTION interval_to_time(interval) RETURNS time
AS $$
BEGIN
RETURN date_part('hours', interval) || ':' || date_part('minutes', interval);
END;
$$
SELECT interval_to_time(interval '1 day 01:30:00');
postgresql formatting intervals