PostgreSQL: intervalを時間数に変換する4つの方法

2024-07-27

PostgreSQLで間隔を時間数に変換する方法

EXTRACT() 関数を使う

EXTRACT() 関数は、間隔から特定の時刻要素を抽出するために使用できます。時間数に変換するには、EXTRACT(HOUR FROM interval) を使用します。

SELECT EXTRACT(HOUR FROM interval '1 day 2 hours 3 minutes');

この例では、1 day 2 hours 3 minutes という間隔から時間数を抽出します。結果は 26 になります。

date_part() 関数を使う

date_part() 関数は、日付または間隔から特定の時刻要素を抽出するために使用できます。時間数に変換するには、date_part('hour', interval) を使用します。

SELECT date_part('hour', interval '1 day 2 hours 3 minutes');

単位換算を使う

間隔を時間数に変換するには、単純に単位換算を行うこともできます。1 日は 24 時間なので、以下の式で変換できます。

SELECT interval / INTERVAL '1 day' * 24;

この例では、interval という間隔を時間数に変換します。

結合を使う

複数の間隔を時間数に変換して合計したい場合は、結合を使用できます。

SELECT SUM(hours) AS total_hours
FROM (
  SELECT EXTRACT(HOUR FROM interval '1 day 2 hours 3 minutes') AS hours
  UNION ALL
  SELECT EXTRACT(HOUR FROM interval '1 day 1 hour 30 minutes') AS hours
) AS t;

この例では、2つの間隔を時間数に変換して合計します。結果は 57 になります。




-- 1. EXTRACT() 関数を使う

SELECT EXTRACT(HOUR FROM interval '1 day 2 hours 3 minutes');
-- 結果: 26

-- 2. date_part() 関数を使う

SELECT date_part('hour', interval '1 day 2 hours 3 minutes');
-- 結果: 26

-- 3. 単位換算を使う

SELECT interval / INTERVAL '1 day' * 24;
-- 結果: 26

-- 4. 結合を使う

SELECT SUM(hours) AS total_hours
FROM (
  SELECT EXTRACT(HOUR FROM interval '1 day 2 hours 3 minutes') AS hours
  UNION ALL
  SELECT EXTRACT(HOUR FROM interval '1 day 1 hour 30 minutes') AS hours
) AS t;
-- 結果: 57



to_char() 関数を使う

to_char() 関数は、日付または間隔を文字列に変換するために使用できます。時間数に変換するには、to_char(interval, 'HH24') を使用します。

SELECT to_char(interval '1 day 2 hours 3 minutes', 'HH24');

CASE 式を使う

CASE 式を使用すると、間隔の長さに応じて異なる値を返すことができます。

SELECT CASE
  WHEN interval < INTERVAL '1 day' THEN EXTRACT(HOUR FROM interval)
  ELSE EXTRACT(HOUR FROM interval) + 24
END AS hours
FROM table;

この例では、table テーブルの interval 列の間隔を時間数に変換します。1 日未満の間隔はそのまま時間数に変換し、1 日以上の間隔は 24 時間を加算します。

PL/pgSQL 関数を使う

PL/pgSQL 関数を使用して、間隔を時間数に変換することもできます。

CREATE FUNCTION hours_from_interval(interval) RETURNS integer
AS
$$
DECLARE
  hours integer;
BEGIN
  SELECT EXTRACT(HOUR FROM interval) INTO hours;
  RETURN hours;
END;
$$
LANGUAGE plpgsql;

SELECT hours_from_interval(interval '1 day 2 hours 3 minutes');

datetime postgresql intervals



Webアプリケーションに最適なデータベースは?MySQLとPostgreSQLの徹底比較

MySQLとPostgreSQLは、Webアプリケーション開発で広く利用されるオープンソースのRDBMS(リレーショナルデータベース管理システム)です。それぞれ異なる強みと弱みを持つため、最適な選択はアプリケーションの要件によって異なります。...


psql スクリプトで繰り返し実行するタスクを簡略化する

psql スクリプト変数は SET コマンドを使って宣言します。以下の形式です。例えば、データベース名とユーザー名を格納する変数を宣言するには、次のように記述します。変数名は大文字と小文字を区別し、空白文字を含めることはできません。変数は、$ 記号 followed by 変数名を使ってクエリ内で参照できます。例えば、以下のクエリは、dbname 変数で指定されたデータベースに接続します。...


PostgreSQLで特定のテーブルのWrite Ahead Loggingを無効にするその他の方法

WALを無効にする理由特定のテーブルの更新頻度が非常に高く、WALによるオーバーヘッドが問題になる場合特定のテーブルのデータ損失が許容される場合特定のテーブルのWALを無効にする方法は、以下の2つがあります。ALTER TABLEコマンドを使用する...


PostgreSQLでGROUP BYクエリで文字列フィールドを連結するサンプルコードと実行方法

PostgreSQLデータベース文字列フィールドを含むテーブル次のテーブルを想定します。このテーブルには、名前と都市を含むユーザー情報が格納されています。この情報を使用して、各都市に住むユーザーの名前をカンマ区切りで連結したリストを作成します。...


pglogicalとDebeziumによるリアルタイムクロスデータベースクエリ

postgres_fdwpostgres_fdw は、PostgreSQL 9.1 以降で利用可能な公式の外国データラッパー (FDW) です。 FDW は、あたかもローカルテーブルであるかのように、リモートデータベースのテーブルにアクセスするための仕組みを提供します。 postgres_fdw を使用すると、以下のことができます。...



SQL SQL SQL SQL Amazon で見る



標準準拠の文字列モード:PostgreSQLにおける文字列リテラルの新しいルール

文字列リテラルPostgreSQLでは、文字列リテラルは単一引用符または二重引用符で囲みます。エスケープ文字文字列リテラルの中には、特殊な意味を持つ文字があります。例えば、単一引用符は文字列の終わりを示すために使用されます。これらの特殊な文字を文字列リテラル内で使用するには、エスケープする必要があります。


DATETIME2 型と TRY_CONVERT 関数で datetime 型から時間部分を削除する

SQL Server には、datetime 型の日付時刻データを扱う様々な関数があります。その中でも、時間部分を削除して日付のみを取得する方法はいくつか存在します。方法DATEADD 関数DATEADD 関数は、指定された日付時刻に日数、月数、年数などを加算・減算する関数です。時間部分を削除するには、DATEADD(datepart


データベース移行の落とし穴!MySQLからPostgreSQLに移行する際の注意点

MySQLとPostgreSQLは、どちらもオープンソースのデータベース管理システム(DBMS)ですが、それぞれ異なる特徴と強みを持っています。MySQLは使いやすさと高速処理で知られる一方、PostgreSQLはより高度な機能と堅牢性を備えています。


PostgreSQL: GINインデックスとGiSTインデックスの代替手段

PostgreSQLでは、GINとGiSTという2種類の特殊なインデックスを使用できます。どちらのインデックスも、部分一致検索や複雑なデータ型に対するクエリのパフォーマンスを向上させるのに役立ちます。GINインデックス:Generalized Inverted Indexの略


データベースアプリケーションの監査証跡/変更履歴を残すための効果的な戦略

データベースアプリケーションにおいて、監査証跡(audit trail) と変更履歴(change history) は、データの整合性とセキュリティを確保するために不可欠です。監査証跡は、誰がいつどのような操作を行ったかを記録することで、不正なアクセスやデータの改ざんなどを検知し、追跡することができます。変更履歴は、データベースのスキーマやデータの変更内容を記録することで、データベースの進化を把握し、必要に応じて過去の状態に戻すことができます。