のは、仮定しましょうこれはあなたのテーブルです:このデータと
CREATE TABLE t
(
custid integer,
warranty_period integer,
purchase_timestamp date /* timestamp ? */
);
:
INSERT INTO t
(custid, warranty_period, purchase_timestamp)
VALUES
(1, 365, '03-01-2017'),
(2, 30, '03-04-2017'),
(3, 10, '25-05-2017'),
(4, 30, '20-05-2017'),
(5, 365, '04-06-2017'),
(6, 100, '18-06-2017'),
(7, 90, '30-06-2017'),
(8, 10, '05-07-2017'),
(9, 30, '09-07-2017'),
(10, 365, '17-07-2017') ;
あなただけ使用することができSELECT
次
SELECT
custid,
purchase_timestamp + cast(warranty_period || ' days' AS interval) AS end_of_warranty
FROM
t
ORDER BY
custid ;
または
SELECT
custid,
purchase_timestamp + make_interval(days := warranty_period) AS end_of_warranty
FROM
t
ORDER BY
custid ;
とPostgreSQLは日付(またはタイムスタンプ)に間隔を追加すると、タイムスタンプを返します方法を知っているだけのこと
custid | end_of_warranty
-----: | :------------------
1 | 2018-01-03 00:00:00
2 | 2017-05-03 00:00:00
3 | 2017-06-04 00:00:00
4 | 2017-06-19 00:00:00
5 | 2018-06-04 00:00:00
6 | 2017-09-26 00:00:00
7 | 2017-09-28 00:00:00
8 | 2017-07-15 00:00:00
9 | 2017-08-08 00:00:00
10 | 2018-07-17 00:00:00
注意を取得します。
は、あなたの間隔を指定するには、使用する必要が
cast(warranty_period || ' days' AS interval)
またはSQL標準に近い、あるいは特定のPostgreSQL date/time function使用
make_interval(days := warranty_period)
を使用
warranty_period * interval '1 day'
。
SELECT
custid,
purchase_timestamp + warranty_period AS end_of_warranty
FROM
t
ORDER BY
custid ;
(日付+整数)のため+
オペレータが存在するという事実に依存しているの数として整数を扱います:あなたはまた、(最も簡単な)形式を使用することができます
日、および同じ操作を実行します。この場合、列purchase_timestamp
は、実際にはとするか、CAST(... AS date)
とする必要があります。 dbfiddle here
で
チェックアウトすべてのオプションは、あなたは、MySQLやPostgreSQLを使用していますか?両方のデータベースで日付操作と書式設定の機能が異なります。 *両方の*データベースで動作する文が存在する可能性は低いです。 – joanolo
PostgreSQL。 redshiftでこのクエリを実行するDB –
Postgres –