]> granicus.if.org Git - postgresql/blob - src/test/regress/sql/horology.sql
Support full POSIX-style time zone: EST+3, PST-3, etc.
[postgresql] / src / test / regress / sql / horology.sql
1 --
2 -- HOROLOGY
3 --
4
5 --
6 -- timestamp, interval arithmetic
7 --
8
9 SELECT timestamp '1996-03-01' - interval '1 second' AS "Feb 29";
10 SELECT timestamp '1999-03-01' - interval '1 second' AS "Feb 28";
11 SELECT timestamp '2000-03-01' - interval '1 second' AS "Feb 29";
12 SELECT timestamp '1999-12-01' + interval '1 month - 1 second' AS "Dec 31";
13
14 CREATE TABLE TEMP_TIMESTAMP (f1 timestamp);
15
16 -- get some candidate input values
17
18 INSERT INTO TEMP_TIMESTAMP (f1)
19   SELECT d1 FROM TIMESTAMP_TBL
20   WHERE d1 BETWEEN '13-jun-1957' AND '1-jan-1997'
21    OR d1 BETWEEN '1-jan-1999' AND '1-jan-2010';
22
23 SELECT '' AS "15", f1 AS timestamp
24   FROM TEMP_TIMESTAMP
25   ORDER BY timestamp;
26
27 SELECT '' AS "150", d.f1 AS timestamp, t.f1 AS interval, d.f1 + t.f1 AS plus
28   FROM TEMP_TIMESTAMP d, INTERVAL_TBL t
29   ORDER BY plus, timestamp, interval;
30
31 SELECT '' AS "150", d.f1 AS timestamp, t.f1 AS interval, d.f1 - t.f1 AS minus
32   FROM TEMP_TIMESTAMP d, INTERVAL_TBL t
33   WHERE isfinite(d.f1)
34   ORDER BY minus, timestamp, interval;
35
36 SELECT '' AS "15", d.f1 AS timestamp, timestamp '1980-01-06 00:00 GMT' AS gpstime_zero,
37    d.f1 - timestamp '1980-01-06 00:00 GMT' AS difference
38   FROM TEMP_TIMESTAMP d
39   ORDER BY difference;
40
41 SELECT '' AS "225", d1.f1 AS timestamp1, d2.f1 AS timestamp2, d1.f1 - d2.f1 AS difference
42   FROM TEMP_TIMESTAMP d1, TEMP_TIMESTAMP d2
43   ORDER BY timestamp1, timestamp2, difference;
44
45 SELECT '' as "54", d1 as timestamp,
46   date_part('year', d1) AS year, date_part('month', d1) AS month,
47   date_part('day',d1) AS day, date_part('hour', d1) AS hour,
48   date_part('minute', d1) AS minute, date_part('second', d1) AS second
49   FROM TIMESTAMP_TBL
50   WHERE isfinite(d1) and d1 >= '1-jan-1900 GMT'
51   ORDER BY timestamp;
52
53 --
54 -- abstime, reltime arithmetic
55 --
56
57 SELECT '' AS four, f1 AS abstime,
58   date_part('year', f1) AS year, date_part('month', f1) AS month,
59   date_part('day',f1) AS day, date_part('hour', f1) AS hour,
60   date_part('minute', f1) AS minute, date_part('second', f1) AS second
61   FROM ABSTIME_TBL
62   WHERE isfinite(f1) and f1 <> abstime 'current'
63   ORDER BY abstime;
64
65 --
66 -- Conversions
67 --
68
69 SELECT '' AS "15", f1 AS timestamp, date( f1) AS date
70   FROM TEMP_TIMESTAMP
71   WHERE f1 <> timestamp 'current'
72   ORDER BY date;
73
74 SELECT '' AS "15", f1 AS timestamp, abstime( f1) AS abstime
75   FROM TEMP_TIMESTAMP
76   ORDER BY abstime;
77
78 SELECT '' AS four, f1 AS abstime, date( f1) AS date
79   FROM ABSTIME_TBL
80   WHERE isfinite(f1) AND f1 <> abstime 'current'
81   ORDER BY date;
82
83 SELECT '' AS five, d1 AS timestamp, abstime(d1) AS abstime
84   FROM TIMESTAMP_TBL WHERE NOT isfinite(d1);
85
86 SELECT '' AS three, f1 as abstime, timestamp(f1) AS timestamp
87   FROM ABSTIME_TBL WHERE NOT isfinite(f1);
88
89 SELECT '' AS ten, f1 AS interval, reltime( f1) AS reltime
90   FROM INTERVAL_TBL;
91
92 SELECT '' AS six, f1 as reltime, interval( f1) AS interval
93   FROM RELTIME_TBL;
94
95 DROP TABLE TEMP_TIMESTAMP;
96
97 --
98 -- Formats
99 --
100
101 SET DateStyle TO 'US,Postgres';
102
103 SHOW DateStyle;
104
105 SELECT '' AS "66", d1 AS us_postgres FROM TIMESTAMP_TBL;
106
107 SELECT '' AS eight, f1 AS us_postgres FROM ABSTIME_TBL;
108
109 SET DateStyle TO 'US,ISO';
110
111 SELECT '' AS "66", d1 AS us_iso FROM TIMESTAMP_TBL;
112
113 SELECT '' AS eight, f1 AS us_iso FROM ABSTIME_TBL;
114
115 SET DateStyle TO 'US,SQL';
116
117 SHOW DateStyle;
118
119 SELECT '' AS "66", d1 AS us_sql FROM TIMESTAMP_TBL;
120
121 SELECT '' AS eight, f1 AS us_sql FROM ABSTIME_TBL;
122
123 SET DateStyle TO 'European,Postgres';
124
125 SHOW DateStyle;
126
127 INSERT INTO TIMESTAMP_TBL VALUES('13/06/1957');
128
129 SELECT count(*) as one FROM TIMESTAMP_TBL WHERE d1 = 'Jun 13 1957';
130
131 SELECT '' AS "67", d1 AS european_postgres FROM TIMESTAMP_TBL;
132
133 SELECT '' AS eight, f1 AS european_postgres FROM ABSTIME_TBL;
134
135 SET DateStyle TO 'European,ISO';
136
137 SHOW DateStyle;
138
139 SELECT '' AS "67", d1 AS european_iso FROM TIMESTAMP_TBL;
140
141 SELECT '' AS eight, f1 AS european_iso FROM ABSTIME_TBL;
142
143 SET DateStyle TO 'European,SQL';
144
145 SHOW DateStyle;
146
147 SELECT '' AS "67", d1 AS european_sql FROM TIMESTAMP_TBL;
148
149 SELECT '' AS eight, f1 AS european_sql FROM ABSTIME_TBL;
150
151 RESET DateStyle;