diff --git a/src/test/regress/expected/horology-no-DST-before-1970.out b/src/test/regress/expected/horology-no-DST-before-1970.out index fb197c746c..c4481c54f4 100644 --- a/src/test/regress/expected/horology-no-DST-before-1970.out +++ b/src/test/regress/expected/horology-no-DST-before-1970.out @@ -70,6 +70,712 @@ SELECT timestamp '1999-12-01' + interval '1 month - 1 second' AS "Dec 31"; Fri Dec 31 23:59:59 1999 PST (1 row) +-- +-- time, interval arithmetic +-- +SELECT CAST(time '01:02' AS interval) AS "+01:02"; + +01:02 +----------------- + @ 1 hour 2 mins +(1 row) + +SELECT CAST(interval '02:03' AS time) AS "02:03:00"; + 02:03:00 +---------- + 02:03:00 +(1 row) + +SELECT time '01:30' + interval '02:01' AS "03:31:00"; + 03:31:00 +---------- + 03:31:00 +(1 row) + +SELECT time '01:30' - interval '02:01' AS "23:29:00"; + 23:29:00 +---------- + 23:29:00 +(1 row) + +SELECT time '02:30' + interval '36:01' AS "14:31:00"; + 14:31:00 +---------- + 14:31:00 +(1 row) + +SELECT time '03:30' + interval '1 month 04:01' AS "07:31:00"; + 07:31:00 +---------- + 07:31:00 +(1 row) + +SELECT interval '04:30' - time '01:02' AS "+03:28"; + +03:28 +------------------- + @ 3 hours 28 mins +(1 row) + +SELECT CAST(time with time zone '01:02-08' AS interval) AS "+00:01"; +ERROR: Cannot cast type 'timetz' to 'interval' +SELECT CAST(interval '02:03' AS time with time zone) AS "02:03:00-08"; +ERROR: Cannot cast type 'interval' to 'timetz' +SELECT time with time zone '01:30' + interval '02:01' AS "03:31:00-08"; + 03:31:00-08 +------------- + 03:31:00-08 +(1 row) + +SELECT time with time zone '01:30-08' - interval '02:01' AS "23:29:00-08"; + 23:29:00-08 +------------- + 23:29:00-08 +(1 row) + +SELECT time with time zone '02:30-08' + interval '36:01' AS "14:31:00-08"; + 14:31:00-08 +------------- + 14:31:00-08 +(1 row) + +SELECT time with time zone '03:30' + interval '1 month 04:01' AS "07:31:00-08"; + 07:31:00-08 +------------- + 07:31:00-08 +(1 row) + +SELECT interval '04:30' - time with time zone '01:02' AS "+03:28"; +ERROR: Unable to identify an operator '-' for types 'interval' and 'timetz' + You will have to retype this query using an explicit cast +-- We get 100 rows when run in GMT... +SELECT t.d1 + i.f1 AS "102" FROM TIMESTAMP_TBL t, INTERVAL_TBL i + WHERE t.d1 BETWEEN '1990-01-01' AND '2001-01-01' + AND i.f1 BETWEEN '00:00' AND '23:00'; + 102 +--------------------------------- + Mon Feb 10 17:33:01 1997 PST + Mon Feb 10 22:32:01 1997 PST + Mon Feb 10 17:33:01.00 1997 PST + Mon Feb 10 22:32:01.00 1997 PST + Mon Feb 10 17:33:02.00 1997 PST + Mon Feb 10 22:32:02.00 1997 PST + Mon Feb 10 17:33:01.40 1997 PST + Mon Feb 10 22:32:01.40 1997 PST + Mon Feb 10 17:33:01.50 1997 PST + Mon Feb 10 22:32:01.50 1997 PST + Mon Feb 10 17:33:01.60 1997 PST + Mon Feb 10 22:32:01.60 1997 PST + Thu Jan 02 00:01:00 1997 PST + Thu Jan 02 05:00:00 1997 PST + Thu Jan 02 03:05:05 1997 PST + Thu Jan 02 08:04:05 1997 PST + Mon Feb 10 17:33:01 1997 PST + Mon Feb 10 22:32:01 1997 PST + Mon Feb 10 17:33:01 1997 PST + Mon Feb 10 22:32:01 1997 PST + Mon Feb 10 17:33:01 1997 PST + Mon Feb 10 22:32:01 1997 PST + Mon Feb 10 17:33:01 1997 PST + Mon Feb 10 22:32:01 1997 PST + Tue Jun 10 17:33:01 1997 PDT + Tue Jun 10 22:32:01 1997 PDT + Wed Mar 15 08:15:01 2000 PST + Wed Mar 15 13:14:01 2000 PST + Wed Mar 15 04:15:02 2000 PST + Wed Mar 15 09:14:02 2000 PST + Wed Mar 15 02:15:03 2000 PST + Wed Mar 15 07:14:03 2000 PST + Wed Mar 15 03:15:04 2000 PST + Wed Mar 15 08:14:04 2000 PST + Wed Mar 15 01:15:05 2000 PST + Wed Mar 15 06:14:05 2000 PST + Mon Feb 10 17:33:01 1997 PST + Mon Feb 10 22:32:01 1997 PST + Mon Feb 10 17:33:01 1997 PST + Mon Feb 10 22:32:01 1997 PST + Mon Feb 10 17:33:00 1997 PST + Mon Feb 10 22:32:00 1997 PST + Mon Feb 10 17:33:01 1997 PST + Mon Feb 10 22:32:01 1997 PST + Mon Feb 10 17:33:01 1997 PST + Mon Feb 10 22:32:01 1997 PST + Mon Feb 10 17:33:01 1997 PST + Mon Feb 10 22:32:01 1997 PST + Mon Feb 10 17:33:01 1997 PST + Mon Feb 10 22:32:01 1997 PST + Mon Feb 10 17:33:01 1997 PST + Mon Feb 10 22:32:01 1997 PST + Mon Feb 10 09:33:01 1997 PST + Mon Feb 10 14:32:01 1997 PST + Mon Feb 10 09:33:01 1997 PST + Mon Feb 10 14:32:01 1997 PST + Mon Feb 10 09:33:01 1997 PST + Mon Feb 10 14:32:01 1997 PST + Tue Jun 10 18:33:01 1997 PDT + Tue Jun 10 23:32:01 1997 PDT + Mon Feb 10 17:33:01 1997 PST + Mon Feb 10 22:32:01 1997 PST + Tue Feb 11 17:33:01 1997 PST + Tue Feb 11 22:32:01 1997 PST + Wed Feb 12 17:33:01 1997 PST + Wed Feb 12 22:32:01 1997 PST + Thu Feb 13 17:33:01 1997 PST + Thu Feb 13 22:32:01 1997 PST + Fri Feb 14 17:33:01 1997 PST + Fri Feb 14 22:32:01 1997 PST + Sat Feb 15 17:33:01 1997 PST + Sat Feb 15 22:32:01 1997 PST + Sun Feb 16 17:33:01 1997 PST + Sun Feb 16 22:32:01 1997 PST + Sun Feb 16 17:33:01 1997 PST + Sun Feb 16 22:32:01 1997 PST + Wed Feb 28 17:33:01 1996 PST + Wed Feb 28 22:32:01 1996 PST + Thu Feb 29 17:33:01 1996 PST + Thu Feb 29 22:32:01 1996 PST + Fri Mar 01 17:33:01 1996 PST + Fri Mar 01 22:32:01 1996 PST + Mon Dec 30 17:33:01 1996 PST + Mon Dec 30 22:32:01 1996 PST + Tue Dec 31 17:33:01 1996 PST + Tue Dec 31 22:32:01 1996 PST + Wed Jan 01 17:33:01 1997 PST + Wed Jan 01 22:32:01 1997 PST + Fri Feb 28 17:33:01 1997 PST + Fri Feb 28 22:32:01 1997 PST + Sat Mar 01 17:33:01 1997 PST + Sat Mar 01 22:32:01 1997 PST + Tue Dec 30 17:33:01 1997 PST + Tue Dec 30 22:32:01 1997 PST + Wed Dec 31 17:33:01 1997 PST + Wed Dec 31 22:32:01 1997 PST + Fri Dec 31 17:33:01 1999 PST + Fri Dec 31 22:32:01 1999 PST + Sat Jan 01 17:33:01 2000 PST + Sat Jan 01 22:32:01 2000 PST + Sun Dec 31 17:33:01 2000 PST + Sun Dec 31 22:32:01 2000 PST +(102 rows) + +SELECT t.d1 - i.f1 AS "102" FROM TIMESTAMP_TBL t, INTERVAL_TBL i + WHERE t.d1 BETWEEN '1990-01-01' AND '2001-01-01' + AND i.f1 BETWEEN '00:00' AND '23:00'; + 102 +--------------------------------- + Mon Feb 10 17:31:01 1997 PST + Mon Feb 10 12:32:01 1997 PST + Mon Feb 10 17:31:01.00 1997 PST + Mon Feb 10 12:32:01.00 1997 PST + Mon Feb 10 17:31:02.00 1997 PST + Mon Feb 10 12:32:02.00 1997 PST + Mon Feb 10 17:31:01.40 1997 PST + Mon Feb 10 12:32:01.40 1997 PST + Mon Feb 10 17:31:01.50 1997 PST + Mon Feb 10 12:32:01.50 1997 PST + Mon Feb 10 17:31:01.60 1997 PST + Mon Feb 10 12:32:01.60 1997 PST + Wed Jan 01 23:59:00 1997 PST + Wed Jan 01 19:00:00 1997 PST + Thu Jan 02 03:03:05 1997 PST + Wed Jan 01 22:04:05 1997 PST + Mon Feb 10 17:31:01 1997 PST + Mon Feb 10 12:32:01 1997 PST + Mon Feb 10 17:31:01 1997 PST + Mon Feb 10 12:32:01 1997 PST + Mon Feb 10 17:31:01 1997 PST + Mon Feb 10 12:32:01 1997 PST + Mon Feb 10 17:31:01 1997 PST + Mon Feb 10 12:32:01 1997 PST + Tue Jun 10 17:31:01 1997 PDT + Tue Jun 10 12:32:01 1997 PDT + Wed Mar 15 08:13:01 2000 PST + Wed Mar 15 03:14:01 2000 PST + Wed Mar 15 04:13:02 2000 PST + Tue Mar 14 23:14:02 2000 PST + Wed Mar 15 02:13:03 2000 PST + Tue Mar 14 21:14:03 2000 PST + Wed Mar 15 03:13:04 2000 PST + Tue Mar 14 22:14:04 2000 PST + Wed Mar 15 01:13:05 2000 PST + Tue Mar 14 20:14:05 2000 PST + Mon Feb 10 17:31:01 1997 PST + Mon Feb 10 12:32:01 1997 PST + Mon Feb 10 17:31:01 1997 PST + Mon Feb 10 12:32:01 1997 PST + Mon Feb 10 17:31:00 1997 PST + Mon Feb 10 12:32:00 1997 PST + Mon Feb 10 17:31:01 1997 PST + Mon Feb 10 12:32:01 1997 PST + Mon Feb 10 17:31:01 1997 PST + Mon Feb 10 12:32:01 1997 PST + Mon Feb 10 17:31:01 1997 PST + Mon Feb 10 12:32:01 1997 PST + Mon Feb 10 17:31:01 1997 PST + Mon Feb 10 12:32:01 1997 PST + Mon Feb 10 17:31:01 1997 PST + Mon Feb 10 12:32:01 1997 PST + Mon Feb 10 09:31:01 1997 PST + Mon Feb 10 04:32:01 1997 PST + Mon Feb 10 09:31:01 1997 PST + Mon Feb 10 04:32:01 1997 PST + Mon Feb 10 09:31:01 1997 PST + Mon Feb 10 04:32:01 1997 PST + Tue Jun 10 18:31:01 1997 PDT + Tue Jun 10 13:32:01 1997 PDT + Mon Feb 10 17:31:01 1997 PST + Mon Feb 10 12:32:01 1997 PST + Tue Feb 11 17:31:01 1997 PST + Tue Feb 11 12:32:01 1997 PST + Wed Feb 12 17:31:01 1997 PST + Wed Feb 12 12:32:01 1997 PST + Thu Feb 13 17:31:01 1997 PST + Thu Feb 13 12:32:01 1997 PST + Fri Feb 14 17:31:01 1997 PST + Fri Feb 14 12:32:01 1997 PST + Sat Feb 15 17:31:01 1997 PST + Sat Feb 15 12:32:01 1997 PST + Sun Feb 16 17:31:01 1997 PST + Sun Feb 16 12:32:01 1997 PST + Sun Feb 16 17:31:01 1997 PST + Sun Feb 16 12:32:01 1997 PST + Wed Feb 28 17:31:01 1996 PST + Wed Feb 28 12:32:01 1996 PST + Thu Feb 29 17:31:01 1996 PST + Thu Feb 29 12:32:01 1996 PST + Fri Mar 01 17:31:01 1996 PST + Fri Mar 01 12:32:01 1996 PST + Mon Dec 30 17:31:01 1996 PST + Mon Dec 30 12:32:01 1996 PST + Tue Dec 31 17:31:01 1996 PST + Tue Dec 31 12:32:01 1996 PST + Wed Jan 01 17:31:01 1997 PST + Wed Jan 01 12:32:01 1997 PST + Fri Feb 28 17:31:01 1997 PST + Fri Feb 28 12:32:01 1997 PST + Sat Mar 01 17:31:01 1997 PST + Sat Mar 01 12:32:01 1997 PST + Tue Dec 30 17:31:01 1997 PST + Tue Dec 30 12:32:01 1997 PST + Wed Dec 31 17:31:01 1997 PST + Wed Dec 31 12:32:01 1997 PST + Fri Dec 31 17:31:01 1999 PST + Fri Dec 31 12:32:01 1999 PST + Sat Jan 01 17:31:01 2000 PST + Sat Jan 01 12:32:01 2000 PST + Sun Dec 31 17:31:01 2000 PST + Sun Dec 31 12:32:01 2000 PST +(102 rows) + +SELECT t.f1 + i.f1 AS "80" FROM TIME_TBL t, INTERVAL_TBL i; + 80 +---------- + 00:01:00 + 05:00:00 + 00:00:00 + 00:00:00 + 00:00:00 + 23:59:46 + 02:03:04 + 00:00:00 + 00:00:00 + 12:00:00 + 01:01:00 + 06:00:00 + 01:00:00 + 01:00:00 + 01:00:00 + 00:59:46 + 03:03:04 + 01:00:00 + 01:00:00 + 13:00:00 + 02:04:00 + 07:03:00 + 02:03:00 + 02:03:00 + 02:03:00 + 02:02:46 + 04:06:04 + 02:03:00 + 02:03:00 + 14:03:00 + 12:00:00 + 16:59:00 + 11:59:00 + 11:59:00 + 11:59:00 + 11:58:46 + 14:02:04 + 11:59:00 + 11:59:00 + 23:59:00 + 12:01:00 + 17:00:00 + 12:00:00 + 12:00:00 + 12:00:00 + 11:59:46 + 14:03:04 + 12:00:00 + 12:00:00 + 00:00:00 + 12:02:00 + 17:01:00 + 12:01:00 + 12:01:00 + 12:01:00 + 12:00:46 + 14:04:04 + 12:01:00 + 12:01:00 + 00:01:00 + 00:00:00 + 04:59:00 + 23:59:00 + 23:59:00 + 23:59:00 + 23:58:46 + 02:02:04 + 23:59:00 + 23:59:00 + 11:59:00 + 00:00:59 + 04:59:59 + 23:59:59 + 23:59:59 + 23:59:59 + 23:59:45 + 02:03:03 + 23:59:59 + 23:59:59 + 11:59:59 +(80 rows) + +SELECT t.f1 - i.f1 AS "80" FROM TIME_TBL t, INTERVAL_TBL i; + 80 +---------- + 23:59:00 + 19:00:00 + 00:00:00 + 00:00:00 + 00:00:00 + 00:00:14 + 21:56:56 + 00:00:00 + 00:00:00 + 12:00:00 + 00:59:00 + 20:00:00 + 01:00:00 + 01:00:00 + 01:00:00 + 01:00:14 + 22:56:56 + 01:00:00 + 01:00:00 + 13:00:00 + 02:02:00 + 21:03:00 + 02:03:00 + 02:03:00 + 02:03:00 + 02:03:14 + 23:59:56 + 02:03:00 + 02:03:00 + 14:03:00 + 11:58:00 + 06:59:00 + 11:59:00 + 11:59:00 + 11:59:00 + 11:59:14 + 09:55:56 + 11:59:00 + 11:59:00 + 23:59:00 + 11:59:00 + 07:00:00 + 12:00:00 + 12:00:00 + 12:00:00 + 12:00:14 + 09:56:56 + 12:00:00 + 12:00:00 + 00:00:00 + 12:00:00 + 07:01:00 + 12:01:00 + 12:01:00 + 12:01:00 + 12:01:14 + 09:57:56 + 12:01:00 + 12:01:00 + 00:01:00 + 23:58:00 + 18:59:00 + 23:59:00 + 23:59:00 + 23:59:00 + 23:59:14 + 21:55:56 + 23:59:00 + 23:59:00 + 11:59:00 + 23:58:59 + 18:59:59 + 23:59:59 + 23:59:59 + 23:59:59 + 00:00:13 + 21:56:55 + 23:59:59 + 23:59:59 + 11:59:59 +(80 rows) + +SELECT t.f2 + i.f1 AS "80" FROM TIME_TBL t, INTERVAL_TBL i; + 80 +------------- + 00:01:00-07 + 05:00:00-07 + 00:00:00-07 + 00:00:00-07 + 00:00:00-07 + 23:59:46-07 + 02:03:04-07 + 00:00:00-07 + 00:00:00-07 + 12:00:00-07 + 01:01:00-07 + 06:00:00-07 + 01:00:00-07 + 01:00:00-07 + 01:00:00-07 + 00:59:46-07 + 03:03:04-07 + 01:00:00-07 + 01:00:00-07 + 13:00:00-07 + 02:04:00-07 + 07:03:00-07 + 02:03:00-07 + 02:03:00-07 + 02:03:00-07 + 02:02:46-07 + 04:06:04-07 + 02:03:00-07 + 02:03:00-07 + 14:03:00-07 + 12:00:00-07 + 16:59:00-07 + 11:59:00-07 + 11:59:00-07 + 11:59:00-07 + 11:58:46-07 + 14:02:04-07 + 11:59:00-07 + 11:59:00-07 + 23:59:00-07 + 12:01:00-07 + 17:00:00-07 + 12:00:00-07 + 12:00:00-07 + 12:00:00-07 + 11:59:46-07 + 14:03:04-07 + 12:00:00-07 + 12:00:00-07 + 00:00:00-07 + 12:02:00-07 + 17:01:00-07 + 12:01:00-07 + 12:01:00-07 + 12:01:00-07 + 12:00:46-07 + 14:04:04-07 + 12:01:00-07 + 12:01:00-07 + 00:01:00-07 + 00:00:00-07 + 04:59:00-07 + 23:59:00-07 + 23:59:00-07 + 23:59:00-07 + 23:58:46-07 + 02:02:04-07 + 23:59:00-07 + 23:59:00-07 + 11:59:00-07 + 00:00:59-07 + 04:59:59-07 + 23:59:59-07 + 23:59:59-07 + 23:59:59-07 + 23:59:45-07 + 02:03:03-07 + 23:59:59-07 + 23:59:59-07 + 11:59:59-07 +(80 rows) + +SELECT t.f2 - i.f1 AS "80" FROM TIME_TBL t, INTERVAL_TBL i; + 80 +------------- + 23:59:00-07 + 19:00:00-07 + 00:00:00-07 + 00:00:00-07 + 00:00:00-07 + 00:00:14-07 + 21:56:56-07 + 00:00:00-07 + 00:00:00-07 + 12:00:00-07 + 00:59:00-07 + 20:00:00-07 + 01:00:00-07 + 01:00:00-07 + 01:00:00-07 + 01:00:14-07 + 22:56:56-07 + 01:00:00-07 + 01:00:00-07 + 13:00:00-07 + 02:02:00-07 + 21:03:00-07 + 02:03:00-07 + 02:03:00-07 + 02:03:00-07 + 02:03:14-07 + 23:59:56-07 + 02:03:00-07 + 02:03:00-07 + 14:03:00-07 + 11:58:00-07 + 06:59:00-07 + 11:59:00-07 + 11:59:00-07 + 11:59:00-07 + 11:59:14-07 + 09:55:56-07 + 11:59:00-07 + 11:59:00-07 + 23:59:00-07 + 11:59:00-07 + 07:00:00-07 + 12:00:00-07 + 12:00:00-07 + 12:00:00-07 + 12:00:14-07 + 09:56:56-07 + 12:00:00-07 + 12:00:00-07 + 00:00:00-07 + 12:00:00-07 + 07:01:00-07 + 12:01:00-07 + 12:01:00-07 + 12:01:00-07 + 12:01:14-07 + 09:57:56-07 + 12:01:00-07 + 12:01:00-07 + 00:01:00-07 + 23:58:00-07 + 18:59:00-07 + 23:59:00-07 + 23:59:00-07 + 23:59:00-07 + 23:59:14-07 + 21:55:56-07 + 23:59:00-07 + 23:59:00-07 + 11:59:00-07 + 23:58:59-07 + 18:59:59-07 + 23:59:59-07 + 23:59:59-07 + 23:59:59-07 + 00:00:13-07 + 21:56:55-07 + 23:59:59-07 + 23:59:59-07 + 11:59:59-07 +(80 rows) + +-- SQL9x OVERLAPS operator +SELECT (timestamp '2000-11-27', timestamp '2000-11-28') + OVERLAPS (timestamp '2000-11-27 12:00', timestamp '2000-11-30') AS "True"; + True +------ + t +(1 row) + +SELECT (timestamp '2000-11-26', timestamp '2000-11-27') + OVERLAPS (timestamp '2000-11-27 12:00', timestamp '2000-11-30') AS "False"; + False +------- + f +(1 row) + +SELECT (timestamp '2000-11-27', timestamp '2000-11-28') + OVERLAPS (timestamp '2000-11-27 12:00', interval '1 day') AS "True"; + True +------ + t +(1 row) + +SELECT (timestamp '2000-11-27', interval '12 hours') + OVERLAPS (timestamp '2000-11-27 12:00', timestamp '2000-11-30') AS "False"; + False +------- + f +(1 row) + +SELECT (timestamp '2000-11-27', interval '12 hours') + OVERLAPS (timestamp '2000-11-27', interval '12 hours') AS "True"; + True +------ + t +(1 row) + +SELECT (timestamp '2000-11-27', interval '12 hours') + OVERLAPS (timestamp '2000-11-27 12:00', interval '12 hours') AS "False"; + False +------- + f +(1 row) + +SELECT (time '00:00', time '01:00') + OVERLAPS (time '00:30', time '01:30') AS "True"; + True +------ + t +(1 row) + +SELECT (time '00:00', interval '1 hour') + OVERLAPS (time '00:30', interval '1 hour') AS "True"; + True +------ + t +(1 row) + +SELECT (time '00:00', interval '1 hour') + OVERLAPS (time '01:30', interval '1 hour') AS "False"; + False +------- + f +(1 row) + +SELECT (time '00:00', interval '1 hour') + OVERLAPS (time '01:30', interval '1 day') AS "True"; + True +------ + f +(1 row) + CREATE TABLE TEMP_TIMESTAMP (f1 timestamp); -- get some candidate input values INSERT INTO TEMP_TIMESTAMP (f1)