Fix pg_dump bug in the database-level collation patch. "datcollate" and
[PostgreSQL.git] / src / test / regress / sql / date.sql
blob97ddbe9e45aca8f398a08895cb14f624107cafa4
1 --
2 -- DATE
3 --
5 CREATE TABLE DATE_TBL (f1 date);
7 INSERT INTO DATE_TBL VALUES ('1957-04-09');
8 INSERT INTO DATE_TBL VALUES ('1957-06-13');
9 INSERT INTO DATE_TBL VALUES ('1996-02-28');
10 INSERT INTO DATE_TBL VALUES ('1996-02-29');
11 INSERT INTO DATE_TBL VALUES ('1996-03-01');
12 INSERT INTO DATE_TBL VALUES ('1996-03-02');
13 INSERT INTO DATE_TBL VALUES ('1997-02-28');
14 INSERT INTO DATE_TBL VALUES ('1997-02-29');
15 INSERT INTO DATE_TBL VALUES ('1997-03-01');
16 INSERT INTO DATE_TBL VALUES ('1997-03-02');
17 INSERT INTO DATE_TBL VALUES ('2000-04-01');
18 INSERT INTO DATE_TBL VALUES ('2000-04-02');
19 INSERT INTO DATE_TBL VALUES ('2000-04-03');
20 INSERT INTO DATE_TBL VALUES ('2038-04-08');
21 INSERT INTO DATE_TBL VALUES ('2039-04-09');
22 INSERT INTO DATE_TBL VALUES ('2040-04-10');
24 SELECT f1 AS "Fifteen" FROM DATE_TBL;
26 SELECT f1 AS "Nine" FROM DATE_TBL WHERE f1 < '2000-01-01';
28 SELECT f1 AS "Three" FROM DATE_TBL
29   WHERE f1 BETWEEN '2000-01-01' AND '2001-01-01';
32 -- Check all the documented input formats
34 SET datestyle TO iso;  -- display results in ISO
36 SET datestyle TO ymd;
38 SELECT date 'January 8, 1999';
39 SELECT date '1999-01-08';
40 SELECT date '1999-01-18';
41 SELECT date '1/8/1999';
42 SELECT date '1/18/1999';
43 SELECT date '18/1/1999';
44 SELECT date '01/02/03';
45 SELECT date '19990108';
46 SELECT date '990108';
47 SELECT date '1999.008';
48 SELECT date 'J2451187';
49 SELECT date 'January 8, 99 BC';
51 SELECT date '99-Jan-08';
52 SELECT date '1999-Jan-08';
53 SELECT date '08-Jan-99';
54 SELECT date '08-Jan-1999';
55 SELECT date 'Jan-08-99';
56 SELECT date 'Jan-08-1999';
57 SELECT date '99-08-Jan';
58 SELECT date '1999-08-Jan';
60 SELECT date '99 Jan 08';
61 SELECT date '1999 Jan 08';
62 SELECT date '08 Jan 99';
63 SELECT date '08 Jan 1999';
64 SELECT date 'Jan 08 99';
65 SELECT date 'Jan 08 1999';
66 SELECT date '99 08 Jan';
67 SELECT date '1999 08 Jan';
69 SELECT date '99-01-08';
70 SELECT date '1999-01-08';
71 SELECT date '08-01-99';
72 SELECT date '08-01-1999';
73 SELECT date '01-08-99';
74 SELECT date '01-08-1999';
75 SELECT date '99-08-01';
76 SELECT date '1999-08-01';
78 SELECT date '99 01 08';
79 SELECT date '1999 01 08';
80 SELECT date '08 01 99';
81 SELECT date '08 01 1999';
82 SELECT date '01 08 99';
83 SELECT date '01 08 1999';
84 SELECT date '99 08 01';
85 SELECT date '1999 08 01';
87 SET datestyle TO dmy;
89 SELECT date 'January 8, 1999';
90 SELECT date '1999-01-08';
91 SELECT date '1999-01-18';
92 SELECT date '1/8/1999';
93 SELECT date '1/18/1999';
94 SELECT date '18/1/1999';
95 SELECT date '01/02/03';
96 SELECT date '19990108';
97 SELECT date '990108';
98 SELECT date '1999.008';
99 SELECT date 'J2451187';
100 SELECT date 'January 8, 99 BC';
102 SELECT date '99-Jan-08';
103 SELECT date '1999-Jan-08';
104 SELECT date '08-Jan-99';
105 SELECT date '08-Jan-1999';
106 SELECT date 'Jan-08-99';
107 SELECT date 'Jan-08-1999';
108 SELECT date '99-08-Jan';
109 SELECT date '1999-08-Jan';
111 SELECT date '99 Jan 08';
112 SELECT date '1999 Jan 08';
113 SELECT date '08 Jan 99';
114 SELECT date '08 Jan 1999';
115 SELECT date 'Jan 08 99';
116 SELECT date 'Jan 08 1999';
117 SELECT date '99 08 Jan';
118 SELECT date '1999 08 Jan';
120 SELECT date '99-01-08';
121 SELECT date '1999-01-08';
122 SELECT date '08-01-99';
123 SELECT date '08-01-1999';
124 SELECT date '01-08-99';
125 SELECT date '01-08-1999';
126 SELECT date '99-08-01';
127 SELECT date '1999-08-01';
129 SELECT date '99 01 08';
130 SELECT date '1999 01 08';
131 SELECT date '08 01 99';
132 SELECT date '08 01 1999';
133 SELECT date '01 08 99';
134 SELECT date '01 08 1999';
135 SELECT date '99 08 01';
136 SELECT date '1999 08 01';
138 SET datestyle TO mdy;
140 SELECT date 'January 8, 1999';
141 SELECT date '1999-01-08';
142 SELECT date '1999-01-18';
143 SELECT date '1/8/1999';
144 SELECT date '1/18/1999';
145 SELECT date '18/1/1999';
146 SELECT date '01/02/03';
147 SELECT date '19990108';
148 SELECT date '990108';
149 SELECT date '1999.008';
150 SELECT date 'J2451187';
151 SELECT date 'January 8, 99 BC';
153 SELECT date '99-Jan-08';
154 SELECT date '1999-Jan-08';
155 SELECT date '08-Jan-99';
156 SELECT date '08-Jan-1999';
157 SELECT date 'Jan-08-99';
158 SELECT date 'Jan-08-1999';
159 SELECT date '99-08-Jan';
160 SELECT date '1999-08-Jan';
162 SELECT date '99 Jan 08';
163 SELECT date '1999 Jan 08';
164 SELECT date '08 Jan 99';
165 SELECT date '08 Jan 1999';
166 SELECT date 'Jan 08 99';
167 SELECT date 'Jan 08 1999';
168 SELECT date '99 08 Jan';
169 SELECT date '1999 08 Jan';
171 SELECT date '99-01-08';
172 SELECT date '1999-01-08';
173 SELECT date '08-01-99';
174 SELECT date '08-01-1999';
175 SELECT date '01-08-99';
176 SELECT date '01-08-1999';
177 SELECT date '99-08-01';
178 SELECT date '1999-08-01';
180 SELECT date '99 01 08';
181 SELECT date '1999 01 08';
182 SELECT date '08 01 99';
183 SELECT date '08 01 1999';
184 SELECT date '01 08 99';
185 SELECT date '01 08 1999';
186 SELECT date '99 08 01';
187 SELECT date '1999 08 01';
189 RESET datestyle;
192 -- Simple math
193 -- Leave most of it for the horology tests
196 SELECT f1 - date '2000-01-01' AS "Days From 2K" FROM DATE_TBL;
198 SELECT f1 - date 'epoch' AS "Days From Epoch" FROM DATE_TBL;
200 SELECT date 'yesterday' - date 'today' AS "One day";
202 SELECT date 'today' - date 'tomorrow' AS "One day";
204 SELECT date 'yesterday' - date 'tomorrow' AS "Two days";
206 SELECT date 'tomorrow' - date 'today' AS "One day";
208 SELECT date 'today' - date 'yesterday' AS "One day";
210 SELECT date 'tomorrow' - date 'yesterday' AS "Two days";
213 -- test extract!
215 -- century
217 SELECT EXTRACT(CENTURY FROM DATE '0101-12-31 BC'); -- -2
218 SELECT EXTRACT(CENTURY FROM DATE '0100-12-31 BC'); -- -1
219 SELECT EXTRACT(CENTURY FROM DATE '0001-12-31 BC'); -- -1
220 SELECT EXTRACT(CENTURY FROM DATE '0001-01-01');    --  1
221 SELECT EXTRACT(CENTURY FROM DATE '0001-01-01 AD'); --  1
222 SELECT EXTRACT(CENTURY FROM DATE '1900-12-31');    -- 19
223 SELECT EXTRACT(CENTURY FROM DATE '1901-01-01');    -- 20
224 SELECT EXTRACT(CENTURY FROM DATE '2000-12-31');    -- 20
225 SELECT EXTRACT(CENTURY FROM DATE '2001-01-01');    -- 21
226 SELECT EXTRACT(CENTURY FROM CURRENT_DATE)>=21 AS True;     -- true
228 -- millennium
230 SELECT EXTRACT(MILLENNIUM FROM DATE '0001-12-31 BC'); -- -1
231 SELECT EXTRACT(MILLENNIUM FROM DATE '0001-01-01 AD'); --  1
232 SELECT EXTRACT(MILLENNIUM FROM DATE '1000-12-31');    --  1
233 SELECT EXTRACT(MILLENNIUM FROM DATE '1001-01-01');    --  2
234 SELECT EXTRACT(MILLENNIUM FROM DATE '2000-12-31');    --  2
235 SELECT EXTRACT(MILLENNIUM FROM DATE '2001-01-01');    --  3
236 -- next test to be fixed on the turn of the next millennium;-)
237 SELECT EXTRACT(MILLENNIUM FROM CURRENT_DATE);         --  3
239 -- decade
241 SELECT EXTRACT(DECADE FROM DATE '1994-12-25');    -- 199
242 SELECT EXTRACT(DECADE FROM DATE '0010-01-01');    --   1
243 SELECT EXTRACT(DECADE FROM DATE '0009-12-31');    --   0
244 SELECT EXTRACT(DECADE FROM DATE '0001-01-01 BC'); --   0
245 SELECT EXTRACT(DECADE FROM DATE '0002-12-31 BC'); --  -1
246 SELECT EXTRACT(DECADE FROM DATE '0011-01-01 BC'); --  -1
247 SELECT EXTRACT(DECADE FROM DATE '0012-12-31 BC'); --  -2
249 -- some other types:
251 -- on a timestamp.
252 SELECT EXTRACT(CENTURY FROM NOW())>=21 AS True;       -- true
253 SELECT EXTRACT(CENTURY FROM TIMESTAMP '1970-03-20 04:30:00.00000'); -- 20
254 -- on an interval
255 SELECT EXTRACT(CENTURY FROM INTERVAL '100 y');  -- 1
256 SELECT EXTRACT(CENTURY FROM INTERVAL '99 y');   -- 0
257 SELECT EXTRACT(CENTURY FROM INTERVAL '-99 y');  -- 0
258 SELECT EXTRACT(CENTURY FROM INTERVAL '-100 y'); -- -1
260 -- test trunc function!
262 SELECT DATE_TRUNC('MILLENNIUM', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1001
263 SELECT DATE_TRUNC('MILLENNIUM', DATE '1970-03-20'); -- 1001-01-01
264 SELECT DATE_TRUNC('CENTURY', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1901
265 SELECT DATE_TRUNC('CENTURY', DATE '1970-03-20'); -- 1901
266 SELECT DATE_TRUNC('CENTURY', DATE '2004-08-10'); -- 2001-01-01
267 SELECT DATE_TRUNC('CENTURY', DATE '0002-02-04'); -- 0001-01-01
268 SELECT DATE_TRUNC('CENTURY', DATE '0055-08-10 BC'); -- 0100-01-01 BC
269 SELECT DATE_TRUNC('DECADE', DATE '1993-12-25'); -- 1990-01-01
270 SELECT DATE_TRUNC('DECADE', DATE '0004-12-25'); -- 0001-01-01 BC
271 SELECT DATE_TRUNC('DECADE', DATE '0002-12-31 BC'); -- 0011-01-01 BC