PostgreSQL での DATEADD() の代替
-
SQL の
DATEADD()
関数 -
PostgreSQL で
DATEADD()
の代わりに+
および-
演算子を使用する -
PostgreSQL で
DATEADD()
の代わりにINTERVAL
データ型を使用する
この記事では、PostgreSQL の DATEADD()
関数に代わるものについて説明します。
SQL の DATEADD()
関数
製品の製造日と有効期限が切れるまでの日数がデータベースに保存されているとします。 次の表でこれを示すことができます。
Create table product
(
name varchar(30) not null,
manufacture_date date,
expires_in int,
constraint PK_PRODUCT primary key (name)
);
ここで、このテーブルに製品のサンプル データを入力してみましょう。
insert into product values ('Fruit Juice', '2022-08-24', 10);
出力:
このデータから、製品が 10 日で期限切れになることしかわかりませんが、正確な有効期限はわかりません。 与えられたデータからそれを計算する方法はありますか?
SQL サーバーには DATEADD()
関数があり、特定の日付に日付間隔を追加するのに役立ちます。 たとえば、SQL サーバーで次のクエリを実行できます。
SELECT DATEADD(day, 1, '2022-08-26') as Next_Day;
出力:
出力は、指定された日付に 1 日を追加した結果を返しました。 同様に、DATEADD()
関数を使用すると、月や年など、他のタイプの日付間隔を追加できます。
日付の加算と減算は数値ほど簡単ではないため、DATEADD()
関数があると便利です。 月と年の値は特定の日の後にインクリメントする必要があり、日もしばらくしてから 1 から再開する必要があることを覚えておく必要があります。
ただし、PostgreSQL は SQL サーバーと同様の DATEADD()
関数を提供していません。 では、PostgreSQL で重要な日付計算を行うにはどうすればよいでしょうか。
この記事では、PostgreSQL の DATEADD()
関数に代わるものについて説明します。
PostgreSQL で DATEADD()
の代わりに +
および -
演算子を使用する
これを行う 1つの方法は、整数の加算と減算の場合と同様に、+
および -
演算子を使用することです。 +
演算子を使用して特定の日数を日付に追加する方法を見てみましょう。
SELECT date '2022-08-24' + 10 as Expiration_Date;
これにより、次の出力が生成されます。
期待どおり、指定された日付に 10 日が追加されていることがわかります。 このクエリを記述する別の方法は次のとおりで、同じ結果が生成されます。
SELECT date '2022-08-24' + integer ‘10’ as Expiration_Date;
出力:
次に、+
および -
演算子を使用して、時間をさかのぼって日付から指定した日数を減算する方法を見てみましょう。 これを行う最初の方法は、以下に示すように、+
演算子を使用して負の整数値を指定することです。
SELECT date '2022-09-03' + -10 as Manufacture_Date;
また
SELECT date '2022-09-03' + integer ‘-10’ as Manufacture_Date;
出力を以下に示します。
2 番目の方法は、-
演算子を使用して、減算する日数を指定することです。 これは次の方法で行われます。
SELECT date '2022-09-03' - 10 as Manufacture_Date;
また
SELECT date '2022-09-03' - integer ‘10’ as Manufacture_Date;
出力を以下に示します。
+
および -
演算子を使用するこの方法は、特定の日数のみを追加する必要がある場合に役立ちます。
日付に 2 か月を追加したい場合はどうしますか? 2 か月を数日に変換し、+
演算子を使用して追加することはいつでもできますが、これは長いプロセスです。
あるいは、INTERVAL
データ型を使用して、任意の日付間隔を直接追加することもできます。 この方法を以下に説明します。
PostgreSQL で DATEADD()
の代わりに INTERVAL
データ型を使用する
INTERVAL
データ型は、日、月、年、週、および時間を時、分、秒で格納します。 いくつかのサンプル クエリを実行して、それぞれがどのように使用されるかを示します。
日数間隔
次の方法で、特定の日数を日付に追加できます。
SELECT date '2022-08-24' + INTERVAL ‘10 day’ as Expiration_Date;
これにより、次の出力が得られます。
出力がタイム ゾーンのないタイムスタンプとして表示されていることがわかります。 これは、INTERVAL
データ型も時間値を処理するためです。そのため、クエリで指定された日付は、日付と時間の両方の値をタイムスタンプとして持つように変換されています。
月間隔
次の方法で、特定の月数を日付に追加できます。
SELECT date '2022-08-24' + INTERVAL ‘2 month’ as Expiration_Date;
これにより、次の出力が得られます。
年間隔
次の方法で、特定の年数を日付に追加できます。
SELECT date '2022-08-24' + INTERVAL ‘1 year’ as Expiration_Date;
これにより、次の出力が得られます。
週間隔
次の方法で、特定の週数を日付に追加できます。
SELECT date '2022-08-24' + INTERVAL ‘1 week’ as Expiration_Date;
これにより、次の出力が得られます。
複数の日付間隔
INTERVAL
データ型を使用して、一度に複数のタイプの日付間隔を追加することもできます。 以下に例を示します。
SELECT date '2022-08-24' + INTERVAL ‘1 week 2 day’ as Expiration_Date;
これにより、次の出力が得られます。
注: これらとは別に、追加する正確な時間、分、または秒を指定することにより、
INTERVAL
データ型を使用して時間間隔を日付に追加することもできます。
変数の日付間隔
記事の冒頭の例では、保存された製造日の値と有効期限までの日数から有効期限を計算する方法について説明しました。 変数に格納された値を使用して日付の計算を実行する方法を見てみましょう。
構文は次のとおりです。
SELECT manufacture_date + expires_in * INTERVAL '1 day' as Expiration_Date FROM product;
このクエリでは、expires_in
変数に格納されている値を、日数を表す INTERVAL
に変換しています。 これにより、次の出力が得られます。
同様に、整数として格納された値を月、年、週に変換し、それらに対して日付計算を実行することもできます。
これは、PostgreSQL の DATEADD()
関数に代わるものに関する議論をまとめたものです。 学び続けます!
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub