mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Support full POSIX-style time zone: EST+3, PST-3, etc.
We probably support a superset of the spec, but I don't have the spec to confirm this. Update regression tests to include tests for this format.
This commit is contained in:
@ -20,29 +20,29 @@ INSERT INTO TEMP_TIMESTAMP (f1)
|
||||
WHERE d1 BETWEEN '13-jun-1957' AND '1-jan-1997'
|
||||
OR d1 BETWEEN '1-jan-1999' AND '1-jan-2010';
|
||||
|
||||
SELECT '' AS "11", f1 AS timestamp
|
||||
SELECT '' AS "15", f1 AS timestamp
|
||||
FROM TEMP_TIMESTAMP
|
||||
ORDER BY timestamp;
|
||||
|
||||
SELECT '' AS "110", d.f1 AS timestamp, t.f1 AS interval, d.f1 + t.f1 AS plus
|
||||
SELECT '' AS "150", d.f1 AS timestamp, t.f1 AS interval, d.f1 + t.f1 AS plus
|
||||
FROM TEMP_TIMESTAMP d, INTERVAL_TBL t
|
||||
ORDER BY plus, timestamp, interval;
|
||||
|
||||
SELECT '' AS "110", d.f1 AS timestamp, t.f1 AS interval, d.f1 - t.f1 AS minus
|
||||
SELECT '' AS "150", d.f1 AS timestamp, t.f1 AS interval, d.f1 - t.f1 AS minus
|
||||
FROM TEMP_TIMESTAMP d, INTERVAL_TBL t
|
||||
WHERE isfinite(d.f1)
|
||||
ORDER BY minus, timestamp, interval;
|
||||
|
||||
SELECT '' AS "11", d.f1 AS timestamp, timestamp '1980-01-06 00:00 GMT' AS gpstime_zero,
|
||||
SELECT '' AS "15", d.f1 AS timestamp, timestamp '1980-01-06 00:00 GMT' AS gpstime_zero,
|
||||
d.f1 - timestamp '1980-01-06 00:00 GMT' AS difference
|
||||
FROM TEMP_TIMESTAMP d
|
||||
ORDER BY difference;
|
||||
|
||||
SELECT '' AS "121", d1.f1 AS timestamp1, d2.f1 AS timestamp2, d1.f1 - d2.f1 AS difference
|
||||
SELECT '' AS "225", d1.f1 AS timestamp1, d2.f1 AS timestamp2, d1.f1 - d2.f1 AS difference
|
||||
FROM TEMP_TIMESTAMP d1, TEMP_TIMESTAMP d2
|
||||
ORDER BY timestamp1, timestamp2, difference;
|
||||
|
||||
SELECT '' as fifty, d1 as timestamp,
|
||||
SELECT '' as "54", d1 as timestamp,
|
||||
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
|
||||
@ -66,12 +66,12 @@ SELECT '' AS four, f1 AS abstime,
|
||||
-- Conversions
|
||||
--
|
||||
|
||||
SELECT '' AS "11", f1 AS timestamp, date( f1) AS date
|
||||
SELECT '' AS "15", f1 AS timestamp, date( f1) AS date
|
||||
FROM TEMP_TIMESTAMP
|
||||
WHERE f1 <> timestamp 'current'
|
||||
ORDER BY date;
|
||||
|
||||
SELECT '' AS "11", f1 AS timestamp, abstime( f1) AS abstime
|
||||
SELECT '' AS "15", f1 AS timestamp, abstime( f1) AS abstime
|
||||
FROM TEMP_TIMESTAMP
|
||||
ORDER BY abstime;
|
||||
|
||||
@ -102,13 +102,13 @@ SET DateStyle TO 'US,Postgres';
|
||||
|
||||
SHOW DateStyle;
|
||||
|
||||
SELECT '' AS sixty_two, d1 AS us_postgres FROM TIMESTAMP_TBL;
|
||||
SELECT '' AS "66", d1 AS us_postgres FROM TIMESTAMP_TBL;
|
||||
|
||||
SELECT '' AS eight, f1 AS us_postgres FROM ABSTIME_TBL;
|
||||
|
||||
SET DateStyle TO 'US,ISO';
|
||||
|
||||
SELECT '' AS sixty_two, d1 AS us_iso FROM TIMESTAMP_TBL;
|
||||
SELECT '' AS "66", d1 AS us_iso FROM TIMESTAMP_TBL;
|
||||
|
||||
SELECT '' AS eight, f1 AS us_iso FROM ABSTIME_TBL;
|
||||
|
||||
@ -116,7 +116,7 @@ SET DateStyle TO 'US,SQL';
|
||||
|
||||
SHOW DateStyle;
|
||||
|
||||
SELECT '' AS sixty_two, d1 AS us_sql FROM TIMESTAMP_TBL;
|
||||
SELECT '' AS "66", d1 AS us_sql FROM TIMESTAMP_TBL;
|
||||
|
||||
SELECT '' AS eight, f1 AS us_sql FROM ABSTIME_TBL;
|
||||
|
||||
@ -128,7 +128,7 @@ INSERT INTO TIMESTAMP_TBL VALUES('13/06/1957');
|
||||
|
||||
SELECT count(*) as one FROM TIMESTAMP_TBL WHERE d1 = 'Jun 13 1957';
|
||||
|
||||
SELECT '' AS sixty_three, d1 AS european_postgres FROM TIMESTAMP_TBL;
|
||||
SELECT '' AS "67", d1 AS european_postgres FROM TIMESTAMP_TBL;
|
||||
|
||||
SELECT '' AS eight, f1 AS european_postgres FROM ABSTIME_TBL;
|
||||
|
||||
@ -136,7 +136,7 @@ SET DateStyle TO 'European,ISO';
|
||||
|
||||
SHOW DateStyle;
|
||||
|
||||
SELECT '' AS sixty_three, d1 AS european_iso FROM TIMESTAMP_TBL;
|
||||
SELECT '' AS "67", d1 AS european_iso FROM TIMESTAMP_TBL;
|
||||
|
||||
SELECT '' AS eight, f1 AS european_iso FROM ABSTIME_TBL;
|
||||
|
||||
@ -144,7 +144,7 @@ SET DateStyle TO 'European,SQL';
|
||||
|
||||
SHOW DateStyle;
|
||||
|
||||
SELECT '' AS sixty_three, d1 AS european_sql FROM TIMESTAMP_TBL;
|
||||
SELECT '' AS "67", d1 AS european_sql FROM TIMESTAMP_TBL;
|
||||
|
||||
SELECT '' AS eight, f1 AS european_sql FROM ABSTIME_TBL;
|
||||
|
||||
|
@ -72,8 +72,11 @@ INSERT INTO TIMESTAMP_TBL VALUES ('19970210 173201 -0800');
|
||||
INSERT INTO TIMESTAMP_TBL VALUES ('1997-06-10 17:32:01 -07:00');
|
||||
|
||||
-- POSIX format
|
||||
INSERT INTO TIMESTAMP_TBL VALUES ('2000-02-15 23:14:30 GMT+8');
|
||||
INSERT INTO TIMESTAMP_TBL VALUES ('2000-02-15 23:14:30 EST+3');
|
||||
INSERT INTO TIMESTAMP_TBL VALUES ('2000-03-15 08:14:01 GMT+8');
|
||||
INSERT INTO TIMESTAMP_TBL VALUES ('2000-03-15 13:14:02 GMT-1');
|
||||
INSERT INTO TIMESTAMP_TBL VALUES ('2000-03-15 12:14:03 GMT -2');
|
||||
INSERT INTO TIMESTAMP_TBL VALUES ('2000-03-15 03:14:04 EST+3');
|
||||
INSERT INTO TIMESTAMP_TBL VALUES ('2000-03-15 02:14:05 EST +2:00');
|
||||
|
||||
-- Variations for acceptable input formats
|
||||
INSERT INTO TIMESTAMP_TBL VALUES ('Feb 10 17:32:01 1997 -0800');
|
||||
@ -129,43 +132,45 @@ INSERT INTO TIMESTAMP_TBL VALUES ('Jan 01 17:32:01 2001');
|
||||
INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 -0097');
|
||||
INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 5097 BC');
|
||||
|
||||
SELECT '' AS sixtythree, d1 FROM TIMESTAMP_TBL;
|
||||
SELECT '' AS "66", d1 FROM TIMESTAMP_TBL;
|
||||
|
||||
-- Demonstrate functions and operators
|
||||
SELECT '' AS fortythree, d1 FROM TIMESTAMP_TBL
|
||||
SELECT '' AS "47", d1 FROM TIMESTAMP_TBL
|
||||
WHERE d1 > timestamp '1997-01-02' and d1 != timestamp 'current';
|
||||
|
||||
SELECT '' AS fifteen, d1 FROM TIMESTAMP_TBL
|
||||
SELECT '' AS "15", d1 FROM TIMESTAMP_TBL
|
||||
WHERE d1 < timestamp '1997-01-02' and d1 != timestamp 'current';
|
||||
|
||||
SELECT '' AS one, d1 FROM TIMESTAMP_TBL
|
||||
WHERE d1 = timestamp '1997-01-02' and d1 != timestamp 'current';
|
||||
|
||||
SELECT '' AS fiftyeight, d1 FROM TIMESTAMP_TBL
|
||||
SELECT '' AS "62", d1 FROM TIMESTAMP_TBL
|
||||
WHERE d1 != timestamp '1997-01-02' and d1 != timestamp 'current';
|
||||
|
||||
SELECT '' AS sixteen, d1 FROM TIMESTAMP_TBL
|
||||
SELECT '' AS "16", d1 FROM TIMESTAMP_TBL
|
||||
WHERE d1 <= timestamp '1997-01-02' and d1 != timestamp 'current';
|
||||
|
||||
SELECT '' AS fortyfour, d1 FROM TIMESTAMP_TBL
|
||||
SELECT '' AS "48", d1 FROM TIMESTAMP_TBL
|
||||
WHERE d1 >= timestamp '1997-01-02' and d1 != timestamp 'current';
|
||||
|
||||
SELECT '' AS sixtythree, d1 + interval '1 year' AS one_year FROM TIMESTAMP_TBL;
|
||||
SELECT '' AS "66", d1 + interval '1 year' AS one_year FROM TIMESTAMP_TBL;
|
||||
|
||||
SELECT '' AS sixtythree, d1 - interval '1 year' AS one_year FROM TIMESTAMP_TBL;
|
||||
SELECT '' AS "66", d1 - interval '1 year' AS one_year FROM TIMESTAMP_TBL;
|
||||
|
||||
-- Casting within a BETWEEN qualifier should probably be allowed by the parser. - tgl 97/04/26
|
||||
--SELECT '' AS fifty, d1 - timestamp '1997-01-02' AS diff
|
||||
-- FROM TIMESTAMP_TBL WHERE d1 BETWEEN timestamp '1902-01-01' AND timestamp '2038-01-01';
|
||||
SELECT '' AS fifty, d1 - timestamp '1997-01-02' AS diff
|
||||
SELECT '' AS "53", d1 - timestamp '1997-01-02' AS diff
|
||||
FROM TIMESTAMP_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,
|
||||
-- Test casting within a BETWEEN qualifier
|
||||
SELECT '' AS "53", d1 - timestamp '1997-01-02' AS diff
|
||||
FROM TIMESTAMP_TBL
|
||||
WHERE d1 BETWEEN timestamp '1902-01-01' AND timestamp '2038-01-01';
|
||||
|
||||
SELECT '' AS "53", 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 TIMESTAMP_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,
|
||||
SELECT '' AS "53", date_part( 'quarter', d1) AS quarter, date_part( 'msec', d1) AS msec,
|
||||
date_part( 'usec', d1) AS usec
|
||||
FROM TIMESTAMP_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01';
|
||||
|
||||
|
Reference in New Issue
Block a user