mirror of https://github.com/postgres/postgres
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
6.8 KiB
149 lines
6.8 KiB
-- *** testing new built-in time types: datetime, timespan ***
|
|
|
|
CREATE TABLE DATETIME_TBL( d1 datetime);
|
|
|
|
-- Shorthand values
|
|
-- Not testable since these are not constant for regression testing.
|
|
-- So, just try to test parser and hope for the best - tgl 97/04/26
|
|
INSERT INTO DATETIME_TBL VALUES ('current');
|
|
INSERT INTO DATETIME_TBL VALUES ('now');
|
|
INSERT INTO DATETIME_TBL VALUES ('today');
|
|
INSERT INTO DATETIME_TBL VALUES ('yesterday');
|
|
INSERT INTO DATETIME_TBL VALUES ('tomorrow');
|
|
INSERT INTO DATETIME_TBL VALUES ('tomorrow EST');
|
|
INSERT INTO DATETIME_TBL VALUES ('tomorrow zulu');
|
|
|
|
SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'today'::datetime;
|
|
SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'tomorrow'::datetime;
|
|
SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'yesterday'::datetime;
|
|
SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'today'::datetime + '1 day'::timespan;
|
|
SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'today'::datetime - '1 day'::timespan;
|
|
|
|
INSERT INTO DATETIME_TBL VALUES ('current');
|
|
BEGIN;
|
|
INSERT INTO DATETIME_TBL VALUES ('now');
|
|
SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'now'::datetime;
|
|
END;
|
|
DELETE FROM DATETIME_TBL;
|
|
|
|
-- Special values
|
|
INSERT INTO DATETIME_TBL VALUES ('invalid');
|
|
INSERT INTO DATETIME_TBL VALUES ('-infinity');
|
|
INSERT INTO DATETIME_TBL VALUES ('infinity');
|
|
INSERT INTO DATETIME_TBL VALUES ('epoch');
|
|
|
|
-- Postgres v6.0 standard output format
|
|
INSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01 1997 PST');
|
|
INSERT INTO DATETIME_TBL VALUES ('Invalid Abstime');
|
|
INSERT INTO DATETIME_TBL VALUES ('Undefined Abstime');
|
|
|
|
-- Variations on Postgres v6.1 standard output format
|
|
INSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01.000001 1997 PST');
|
|
INSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01.999999 1997 PST');
|
|
INSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01.4 1997 PST');
|
|
INSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01.5 1997 PST');
|
|
INSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01.6 1997 PST');
|
|
|
|
-- ISO 8601 format
|
|
INSERT INTO DATETIME_TBL VALUES ('1997-01-02');
|
|
INSERT INTO DATETIME_TBL VALUES ('1997-01-02 03:04:05');
|
|
INSERT INTO DATETIME_TBL VALUES ('1997-02-10 17:32:01-08');
|
|
INSERT INTO DATETIME_TBL VALUES ('1997-02-10 17:32:01-0800');
|
|
INSERT INTO DATETIME_TBL VALUES ('1997-02-10 17:32:01 -08:00');
|
|
INSERT INTO DATETIME_TBL VALUES ('19970210 173201 -0800');
|
|
INSERT INTO DATETIME_TBL VALUES ('1997-06-10 17:32:01 -07:00');
|
|
|
|
-- Variations for acceptable input formats
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 10 17:32:01 1997 -0800');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 10 17:32:01 1997');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 10 5:32PM 1997');
|
|
INSERT INTO DATETIME_TBL VALUES ('1997/02/10 17:32:01-0800');
|
|
INSERT INTO DATETIME_TBL VALUES ('1997-02-10 17:32:01 PST');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb-10-1997 17:32:01 PST');
|
|
INSERT INTO DATETIME_TBL VALUES ('02-10-1997 17:32:01 PST');
|
|
INSERT INTO DATETIME_TBL VALUES ('19970210 173201 PST');
|
|
INSERT INTO DATETIME_TBL VALUES ('97FEB10 5:32:01PM UTC');
|
|
INSERT INTO DATETIME_TBL VALUES ('97/02/10 17:32:01 UTC');
|
|
INSERT INTO DATETIME_TBL VALUES ('97.041 17:32:01 UTC');
|
|
|
|
-- Check date conversion and date arithmetic
|
|
INSERT INTO DATETIME_TBL VALUES ('1997-06-10 18:32:01 PDT');
|
|
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 10 17:32:01 1997');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 11 17:32:01 1997');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 12 17:32:01 1997');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 13 17:32:01 1997');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 14 17:32:01 1997');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 15 17:32:01 1997');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1997');
|
|
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 0097 BC');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 0097');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 0597');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1097');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1697');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1797');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1897');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1997');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 2097');
|
|
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 28 17:32:01 1996');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 29 17:32:01 1996');
|
|
INSERT INTO DATETIME_TBL VALUES ('Mar 01 17:32:01 1996');
|
|
INSERT INTO DATETIME_TBL VALUES ('Dec 30 17:32:01 1996');
|
|
INSERT INTO DATETIME_TBL VALUES ('Dec 31 17:32:01 1996');
|
|
INSERT INTO DATETIME_TBL VALUES ('Jan 01 17:32:01 1997');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 28 17:32:01 1997');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 29 17:32:01 1997');
|
|
INSERT INTO DATETIME_TBL VALUES ('Mar 01 17:32:01 1997');
|
|
INSERT INTO DATETIME_TBL VALUES ('Dec 30 17:32:01 1997');
|
|
INSERT INTO DATETIME_TBL VALUES ('Dec 31 17:32:01 1997');
|
|
INSERT INTO DATETIME_TBL VALUES ('Dec 31 17:32:01 1999');
|
|
INSERT INTO DATETIME_TBL VALUES ('Jan 01 17:32:01 2000');
|
|
INSERT INTO DATETIME_TBL VALUES ('Dec 31 17:32:01 2000');
|
|
INSERT INTO DATETIME_TBL VALUES ('Jan 01 17:32:01 2001');
|
|
|
|
-- Currently unsupported syntax and ranges
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 -0097');
|
|
INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 5097 BC');
|
|
|
|
SELECT '' AS sixtythree, d1 FROM DATETIME_TBL;
|
|
|
|
-- Demonstrate functions and operators
|
|
SELECT '' AS fortythree, d1 FROM DATETIME_TBL
|
|
WHERE d1 > '1997-01-02'::datetime and d1 != 'current'::datetime;
|
|
|
|
SELECT '' AS fifteen, d1 FROM DATETIME_TBL
|
|
WHERE d1 < '1997-01-02'::datetime and d1 != 'current'::datetime;
|
|
|
|
SELECT '' AS one, d1 FROM DATETIME_TBL
|
|
WHERE d1 = '1997-01-02'::datetime and d1 != 'current'::datetime;
|
|
|
|
SELECT '' AS fiftyeight, d1 FROM DATETIME_TBL
|
|
WHERE d1 != '1997-01-02'::datetime and d1 != 'current'::datetime;
|
|
|
|
SELECT '' AS sixteen, d1 FROM DATETIME_TBL
|
|
WHERE d1 <= '1997-01-02'::datetime and d1 != 'current'::datetime;
|
|
|
|
SELECT '' AS fortyfour, d1 FROM DATETIME_TBL
|
|
WHERE d1 >= '1997-01-02'::datetime and d1 != 'current'::datetime;
|
|
|
|
SELECT '' AS sixtythree, d1 + '1 year'::timespan AS one_year FROM DATETIME_TBL;
|
|
|
|
SELECT '' AS sixtythree, d1 - '1 year'::timespan AS one_year FROM DATETIME_TBL;
|
|
|
|
-- Casting within a BETWEEN qualifier should probably be allowed by the parser. - tgl 97/04/26
|
|
--SELECT '' AS fifty, d1 - '1997-01-02'::datetime AS diff
|
|
-- FROM DATETIME_TBL WHERE d1 BETWEEN '1902-01-01'::datetime AND '2038-01-01'::datetime;
|
|
SELECT '' AS fifty, d1 - '1997-01-02'::datetime AS diff
|
|
FROM DATETIME_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01';
|
|
|
|
SELECT '' AS fortynine, date_part( 'year', d1) AS year, date_part( 'month', d1) AS month,
|
|
date_part( 'day', d1) AS day, date_part( 'hour', d1) AS hour,
|
|
date_part( 'minute', d1) AS minute, date_part( 'second', d1) AS second
|
|
FROM DATETIME_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01';
|
|
|
|
SELECT '' AS fortynine, date_part( 'quarter', d1) AS quarter, date_part( 'msec', d1) AS msec,
|
|
date_part( 'usec', d1) AS usec
|
|
FROM DATETIME_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01';
|
|
|
|
|