Navicatブログ

高度なPostgreSQLのデータ型の探索:範囲型 2024年3月8日 Robert Gravelle

範囲型は、単一のデータベースフィールド内の値の範囲を表す簡潔な方法を提供します。これらは、時間データから数値間隔に至るまで様々な定義域に適用されます。このブログ記事では、DML/SQLステートメントとNavicat for PostgreSQL 16 の両方を使用したその使用法(および利点)について詳しく説明します。

範囲型を理解する

PostgreSQLでは、範囲型を使用して値の連続する範囲を表現できます。これらの範囲には、数値、日付、タイムスタンプなどの様々なデータ型を使用できます。例えば、範囲は、期間、一連の温度、または製品価格の範囲を表す場合があります。

実例: レンタル期間の追跡

無料の dvdrentalサンプルデータベース でレンタル期間を追跡するシナリオを考えてみましょう。範囲型を利用して、レンタル期間を効率的に保存できます。新しい"rentals_with_rental_period"テーブルを作成してデータを追加するステートメントは次のとおりです:


CREATE TABLE rentals_with_rental_period (
    rental_id SERIAL PRIMARY KEY,
    customer_id INT,
    rental_duration INT,
    rental_period DATERANGE
);

INSERT INTO rentals_with_rental_period (customer_id, rental_duration, rental_period)
VALUES
(1, 7, '[2024-02-01, 2024-02-08]'),
(2, 5, '[2024-01-15, 2024-01-20]');
    

Navicatでは、テーブルデザイナーを使用してテーブルを作成できます:

rentals_with_rental_period_in_table_designer (59K)

テーブルを作成したら、テーブルにデータを追加できます。範囲値の前には必ず角括弧"["を付け、括弧")"で終わります。これにより、値が範囲に属していることがNavicatに伝えられます:

rentals_with_rental_period_table (24K)

この例では、"rental_period"列に、各レンタルの開始日と終了日を表す範囲が格納されます。@> 演算子を使用すると、特定の日付を含むレンタルを簡単にクエリできます:

range_query (40K)

アプリケーションの拡張: 数値間隔

範囲型は時間データに限定されません。数値間隔を表すために使用することもできます。例えば、製品の価格が購入数量に基づいて特定の範囲内で変動するというシナリオを想像してください。範囲型を使用してこれを効果的にモデル化できます:


CREATE TABLE product_price (
    product_id SERIAL PRIMARY KEY,
    price_range NUMRANGE
);

INSERT INTO product_price (price_range)
VALUES
('[10.00, 20.00)'),
('[20.00, 30.00)'),
('[30.00, )');
    

この例では、"price_range"列に、各製品の最小価格と最大価格を表す範囲が格納されます。@> 演算子を使用して、特定の価格範囲内の製品をクエリできます:


SELECT * FROM product_price
WHERE price_range @> 25.00;
    

結論

PostgreSQLの範囲型は、値の連続する範囲を表現およびクエリするための強力な方法を提供します。時間データ、数値間隔、またはその他の連続する値を扱う場合、範囲型は簡潔かつ効率的なソリューションを提供します。範囲型を活用することによって、開発者はデータベーススキーマの表現力と柔軟性を強化し、より洗練されたアプリケーションへの道を開くことができます。

PostgreSQLデータベース開発用の使いやすいグラフィカルツールをお探しですか?Navicat 16 For PostgreSQLが全てをカバーします。こちら をクリックして、全ての機能が使用可能なアプリケーションをダウンロードし、14日間無料でお試しください。

ブログのアーカイブ
シェア