Detect redundant GROUP BY columns using UNIQUE indexes
[pgsql.git] / src / test / regress / expected / date.out
blobdcab9e76f45dea8e8abca1ab5c7a258327634ec4
1 --
2 -- DATE
3 --
4 CREATE TABLE DATE_TBL (f1 date);
5 INSERT INTO DATE_TBL VALUES ('1957-04-09');
6 INSERT INTO DATE_TBL VALUES ('1957-06-13');
7 INSERT INTO DATE_TBL VALUES ('1996-02-28');
8 INSERT INTO DATE_TBL VALUES ('1996-02-29');
9 INSERT INTO DATE_TBL VALUES ('1996-03-01');
10 INSERT INTO DATE_TBL VALUES ('1996-03-02');
11 INSERT INTO DATE_TBL VALUES ('1997-02-28');
12 INSERT INTO DATE_TBL VALUES ('1997-02-29');
13 ERROR:  date/time field value out of range: "1997-02-29"
14 LINE 1: INSERT INTO DATE_TBL VALUES ('1997-02-29');
15                                      ^
16 INSERT INTO DATE_TBL VALUES ('1997-03-01');
17 INSERT INTO DATE_TBL VALUES ('1997-03-02');
18 INSERT INTO DATE_TBL VALUES ('2000-04-01');
19 INSERT INTO DATE_TBL VALUES ('2000-04-02');
20 INSERT INTO DATE_TBL VALUES ('2000-04-03');
21 INSERT INTO DATE_TBL VALUES ('2038-04-08');
22 INSERT INTO DATE_TBL VALUES ('2039-04-09');
23 INSERT INTO DATE_TBL VALUES ('2040-04-10');
24 INSERT INTO DATE_TBL VALUES ('2040-04-10 BC');
25 SELECT f1 FROM DATE_TBL;
26       f1       
27 ---------------
28  04-09-1957
29  06-13-1957
30  02-28-1996
31  02-29-1996
32  03-01-1996
33  03-02-1996
34  02-28-1997
35  03-01-1997
36  03-02-1997
37  04-01-2000
38  04-02-2000
39  04-03-2000
40  04-08-2038
41  04-09-2039
42  04-10-2040
43  04-10-2040 BC
44 (16 rows)
46 SELECT f1 FROM DATE_TBL WHERE f1 < '2000-01-01';
47       f1       
48 ---------------
49  04-09-1957
50  06-13-1957
51  02-28-1996
52  02-29-1996
53  03-01-1996
54  03-02-1996
55  02-28-1997
56  03-01-1997
57  03-02-1997
58  04-10-2040 BC
59 (10 rows)
61 SELECT f1 FROM DATE_TBL
62   WHERE f1 BETWEEN '2000-01-01' AND '2001-01-01';
63      f1     
64 ------------
65  04-01-2000
66  04-02-2000
67  04-03-2000
68 (3 rows)
71 -- Check all the documented input formats
73 SET datestyle TO iso;  -- display results in ISO
74 SET datestyle TO ymd;
75 SELECT date 'January 8, 1999';
76     date    
77 ------------
78  1999-01-08
79 (1 row)
81 SELECT date '1999-01-08';
82     date    
83 ------------
84  1999-01-08
85 (1 row)
87 SELECT date '1999-01-18';
88     date    
89 ------------
90  1999-01-18
91 (1 row)
93 SELECT date '1/8/1999';
94 ERROR:  date/time field value out of range: "1/8/1999"
95 LINE 1: SELECT date '1/8/1999';
96                     ^
97 HINT:  Perhaps you need a different "DateStyle" setting.
98 SELECT date '1/18/1999';
99 ERROR:  date/time field value out of range: "1/18/1999"
100 LINE 1: SELECT date '1/18/1999';
101                     ^
102 HINT:  Perhaps you need a different "DateStyle" setting.
103 SELECT date '18/1/1999';
104 ERROR:  date/time field value out of range: "18/1/1999"
105 LINE 1: SELECT date '18/1/1999';
106                     ^
107 HINT:  Perhaps you need a different "DateStyle" setting.
108 SELECT date '01/02/03';
109     date    
110 ------------
111  2001-02-03
112 (1 row)
114 SELECT date '19990108';
115     date    
116 ------------
117  1999-01-08
118 (1 row)
120 SELECT date '990108';
121     date    
122 ------------
123  1999-01-08
124 (1 row)
126 SELECT date '1999.008';
127     date    
128 ------------
129  1999-01-08
130 (1 row)
132 SELECT date 'J2451187';
133     date    
134 ------------
135  1999-01-08
136 (1 row)
138 SELECT date 'January 8, 99 BC';
139 ERROR:  date/time field value out of range: "January 8, 99 BC"
140 LINE 1: SELECT date 'January 8, 99 BC';
141                     ^
142 HINT:  Perhaps you need a different "DateStyle" setting.
143 SELECT date '99-Jan-08';
144     date    
145 ------------
146  1999-01-08
147 (1 row)
149 SELECT date '1999-Jan-08';
150     date    
151 ------------
152  1999-01-08
153 (1 row)
155 SELECT date '08-Jan-99';
156 ERROR:  date/time field value out of range: "08-Jan-99"
157 LINE 1: SELECT date '08-Jan-99';
158                     ^
159 HINT:  Perhaps you need a different "DateStyle" setting.
160 SELECT date '08-Jan-1999';
161     date    
162 ------------
163  1999-01-08
164 (1 row)
166 SELECT date 'Jan-08-99';
167 ERROR:  date/time field value out of range: "Jan-08-99"
168 LINE 1: SELECT date 'Jan-08-99';
169                     ^
170 HINT:  Perhaps you need a different "DateStyle" setting.
171 SELECT date 'Jan-08-1999';
172     date    
173 ------------
174  1999-01-08
175 (1 row)
177 SELECT date '99-08-Jan';
178 ERROR:  invalid input syntax for type date: "99-08-Jan"
179 LINE 1: SELECT date '99-08-Jan';
180                     ^
181 SELECT date '1999-08-Jan';
182 ERROR:  invalid input syntax for type date: "1999-08-Jan"
183 LINE 1: SELECT date '1999-08-Jan';
184                     ^
185 SELECT date '99 Jan 08';
186     date    
187 ------------
188  1999-01-08
189 (1 row)
191 SELECT date '1999 Jan 08';
192     date    
193 ------------
194  1999-01-08
195 (1 row)
197 SELECT date '08 Jan 99';
198 ERROR:  date/time field value out of range: "08 Jan 99"
199 LINE 1: SELECT date '08 Jan 99';
200                     ^
201 HINT:  Perhaps you need a different "DateStyle" setting.
202 SELECT date '08 Jan 1999';
203     date    
204 ------------
205  1999-01-08
206 (1 row)
208 SELECT date 'Jan 08 99';
209 ERROR:  date/time field value out of range: "Jan 08 99"
210 LINE 1: SELECT date 'Jan 08 99';
211                     ^
212 HINT:  Perhaps you need a different "DateStyle" setting.
213 SELECT date 'Jan 08 1999';
214     date    
215 ------------
216  1999-01-08
217 (1 row)
219 SELECT date '99 08 Jan';
220     date    
221 ------------
222  1999-01-08
223 (1 row)
225 SELECT date '1999 08 Jan';
226     date    
227 ------------
228  1999-01-08
229 (1 row)
231 SELECT date '99-01-08';
232     date    
233 ------------
234  1999-01-08
235 (1 row)
237 SELECT date '1999-01-08';
238     date    
239 ------------
240  1999-01-08
241 (1 row)
243 SELECT date '08-01-99';
244 ERROR:  date/time field value out of range: "08-01-99"
245 LINE 1: SELECT date '08-01-99';
246                     ^
247 HINT:  Perhaps you need a different "DateStyle" setting.
248 SELECT date '08-01-1999';
249 ERROR:  date/time field value out of range: "08-01-1999"
250 LINE 1: SELECT date '08-01-1999';
251                     ^
252 HINT:  Perhaps you need a different "DateStyle" setting.
253 SELECT date '01-08-99';
254 ERROR:  date/time field value out of range: "01-08-99"
255 LINE 1: SELECT date '01-08-99';
256                     ^
257 HINT:  Perhaps you need a different "DateStyle" setting.
258 SELECT date '01-08-1999';
259 ERROR:  date/time field value out of range: "01-08-1999"
260 LINE 1: SELECT date '01-08-1999';
261                     ^
262 HINT:  Perhaps you need a different "DateStyle" setting.
263 SELECT date '99-08-01';
264     date    
265 ------------
266  1999-08-01
267 (1 row)
269 SELECT date '1999-08-01';
270     date    
271 ------------
272  1999-08-01
273 (1 row)
275 SELECT date '99 01 08';
276     date    
277 ------------
278  1999-01-08
279 (1 row)
281 SELECT date '1999 01 08';
282     date    
283 ------------
284  1999-01-08
285 (1 row)
287 SELECT date '08 01 99';
288 ERROR:  date/time field value out of range: "08 01 99"
289 LINE 1: SELECT date '08 01 99';
290                     ^
291 HINT:  Perhaps you need a different "DateStyle" setting.
292 SELECT date '08 01 1999';
293 ERROR:  date/time field value out of range: "08 01 1999"
294 LINE 1: SELECT date '08 01 1999';
295                     ^
296 HINT:  Perhaps you need a different "DateStyle" setting.
297 SELECT date '01 08 99';
298 ERROR:  date/time field value out of range: "01 08 99"
299 LINE 1: SELECT date '01 08 99';
300                     ^
301 HINT:  Perhaps you need a different "DateStyle" setting.
302 SELECT date '01 08 1999';
303 ERROR:  date/time field value out of range: "01 08 1999"
304 LINE 1: SELECT date '01 08 1999';
305                     ^
306 HINT:  Perhaps you need a different "DateStyle" setting.
307 SELECT date '99 08 01';
308     date    
309 ------------
310  1999-08-01
311 (1 row)
313 SELECT date '1999 08 01';
314     date    
315 ------------
316  1999-08-01
317 (1 row)
319 SET datestyle TO dmy;
320 SELECT date 'January 8, 1999';
321     date    
322 ------------
323  1999-01-08
324 (1 row)
326 SELECT date '1999-01-08';
327     date    
328 ------------
329  1999-01-08
330 (1 row)
332 SELECT date '1999-01-18';
333     date    
334 ------------
335  1999-01-18
336 (1 row)
338 SELECT date '1/8/1999';
339     date    
340 ------------
341  1999-08-01
342 (1 row)
344 SELECT date '1/18/1999';
345 ERROR:  date/time field value out of range: "1/18/1999"
346 LINE 1: SELECT date '1/18/1999';
347                     ^
348 HINT:  Perhaps you need a different "DateStyle" setting.
349 SELECT date '18/1/1999';
350     date    
351 ------------
352  1999-01-18
353 (1 row)
355 SELECT date '01/02/03';
356     date    
357 ------------
358  2003-02-01
359 (1 row)
361 SELECT date '19990108';
362     date    
363 ------------
364  1999-01-08
365 (1 row)
367 SELECT date '990108';
368     date    
369 ------------
370  1999-01-08
371 (1 row)
373 SELECT date '1999.008';
374     date    
375 ------------
376  1999-01-08
377 (1 row)
379 SELECT date 'J2451187';
380     date    
381 ------------
382  1999-01-08
383 (1 row)
385 SELECT date 'January 8, 99 BC';
386      date      
387 ---------------
388  0099-01-08 BC
389 (1 row)
391 SELECT date '99-Jan-08';
392 ERROR:  date/time field value out of range: "99-Jan-08"
393 LINE 1: SELECT date '99-Jan-08';
394                     ^
395 HINT:  Perhaps you need a different "DateStyle" setting.
396 SELECT date '1999-Jan-08';
397     date    
398 ------------
399  1999-01-08
400 (1 row)
402 SELECT date '08-Jan-99';
403     date    
404 ------------
405  1999-01-08
406 (1 row)
408 SELECT date '08-Jan-1999';
409     date    
410 ------------
411  1999-01-08
412 (1 row)
414 SELECT date 'Jan-08-99';
415     date    
416 ------------
417  1999-01-08
418 (1 row)
420 SELECT date 'Jan-08-1999';
421     date    
422 ------------
423  1999-01-08
424 (1 row)
426 SELECT date '99-08-Jan';
427 ERROR:  invalid input syntax for type date: "99-08-Jan"
428 LINE 1: SELECT date '99-08-Jan';
429                     ^
430 SELECT date '1999-08-Jan';
431 ERROR:  invalid input syntax for type date: "1999-08-Jan"
432 LINE 1: SELECT date '1999-08-Jan';
433                     ^
434 SELECT date '99 Jan 08';
435 ERROR:  date/time field value out of range: "99 Jan 08"
436 LINE 1: SELECT date '99 Jan 08';
437                     ^
438 HINT:  Perhaps you need a different "DateStyle" setting.
439 SELECT date '1999 Jan 08';
440     date    
441 ------------
442  1999-01-08
443 (1 row)
445 SELECT date '08 Jan 99';
446     date    
447 ------------
448  1999-01-08
449 (1 row)
451 SELECT date '08 Jan 1999';
452     date    
453 ------------
454  1999-01-08
455 (1 row)
457 SELECT date 'Jan 08 99';
458     date    
459 ------------
460  1999-01-08
461 (1 row)
463 SELECT date 'Jan 08 1999';
464     date    
465 ------------
466  1999-01-08
467 (1 row)
469 SELECT date '99 08 Jan';
470 ERROR:  invalid input syntax for type date: "99 08 Jan"
471 LINE 1: SELECT date '99 08 Jan';
472                     ^
473 SELECT date '1999 08 Jan';
474     date    
475 ------------
476  1999-01-08
477 (1 row)
479 SELECT date '99-01-08';
480 ERROR:  date/time field value out of range: "99-01-08"
481 LINE 1: SELECT date '99-01-08';
482                     ^
483 HINT:  Perhaps you need a different "DateStyle" setting.
484 SELECT date '1999-01-08';
485     date    
486 ------------
487  1999-01-08
488 (1 row)
490 SELECT date '08-01-99';
491     date    
492 ------------
493  1999-01-08
494 (1 row)
496 SELECT date '08-01-1999';
497     date    
498 ------------
499  1999-01-08
500 (1 row)
502 SELECT date '01-08-99';
503     date    
504 ------------
505  1999-08-01
506 (1 row)
508 SELECT date '01-08-1999';
509     date    
510 ------------
511  1999-08-01
512 (1 row)
514 SELECT date '99-08-01';
515 ERROR:  date/time field value out of range: "99-08-01"
516 LINE 1: SELECT date '99-08-01';
517                     ^
518 HINT:  Perhaps you need a different "DateStyle" setting.
519 SELECT date '1999-08-01';
520     date    
521 ------------
522  1999-08-01
523 (1 row)
525 SELECT date '99 01 08';
526 ERROR:  date/time field value out of range: "99 01 08"
527 LINE 1: SELECT date '99 01 08';
528                     ^
529 HINT:  Perhaps you need a different "DateStyle" setting.
530 SELECT date '1999 01 08';
531     date    
532 ------------
533  1999-01-08
534 (1 row)
536 SELECT date '08 01 99';
537     date    
538 ------------
539  1999-01-08
540 (1 row)
542 SELECT date '08 01 1999';
543     date    
544 ------------
545  1999-01-08
546 (1 row)
548 SELECT date '01 08 99';
549     date    
550 ------------
551  1999-08-01
552 (1 row)
554 SELECT date '01 08 1999';
555     date    
556 ------------
557  1999-08-01
558 (1 row)
560 SELECT date '99 08 01';
561 ERROR:  date/time field value out of range: "99 08 01"
562 LINE 1: SELECT date '99 08 01';
563                     ^
564 HINT:  Perhaps you need a different "DateStyle" setting.
565 SELECT date '1999 08 01';
566     date    
567 ------------
568  1999-08-01
569 (1 row)
571 SET datestyle TO mdy;
572 SELECT date 'January 8, 1999';
573     date    
574 ------------
575  1999-01-08
576 (1 row)
578 SELECT date '1999-01-08';
579     date    
580 ------------
581  1999-01-08
582 (1 row)
584 SELECT date '1999-01-18';
585     date    
586 ------------
587  1999-01-18
588 (1 row)
590 SELECT date '1/8/1999';
591     date    
592 ------------
593  1999-01-08
594 (1 row)
596 SELECT date '1/18/1999';
597     date    
598 ------------
599  1999-01-18
600 (1 row)
602 SELECT date '18/1/1999';
603 ERROR:  date/time field value out of range: "18/1/1999"
604 LINE 1: SELECT date '18/1/1999';
605                     ^
606 HINT:  Perhaps you need a different "DateStyle" setting.
607 SELECT date '01/02/03';
608     date    
609 ------------
610  2003-01-02
611 (1 row)
613 SELECT date '19990108';
614     date    
615 ------------
616  1999-01-08
617 (1 row)
619 SELECT date '990108';
620     date    
621 ------------
622  1999-01-08
623 (1 row)
625 SELECT date '1999.008';
626     date    
627 ------------
628  1999-01-08
629 (1 row)
631 SELECT date 'J2451187';
632     date    
633 ------------
634  1999-01-08
635 (1 row)
637 SELECT date 'January 8, 99 BC';
638      date      
639 ---------------
640  0099-01-08 BC
641 (1 row)
643 SELECT date '99-Jan-08';
644 ERROR:  date/time field value out of range: "99-Jan-08"
645 LINE 1: SELECT date '99-Jan-08';
646                     ^
647 HINT:  Perhaps you need a different "DateStyle" setting.
648 SELECT date '1999-Jan-08';
649     date    
650 ------------
651  1999-01-08
652 (1 row)
654 SELECT date '08-Jan-99';
655     date    
656 ------------
657  1999-01-08
658 (1 row)
660 SELECT date '08-Jan-1999';
661     date    
662 ------------
663  1999-01-08
664 (1 row)
666 SELECT date 'Jan-08-99';
667     date    
668 ------------
669  1999-01-08
670 (1 row)
672 SELECT date 'Jan-08-1999';
673     date    
674 ------------
675  1999-01-08
676 (1 row)
678 SELECT date '99-08-Jan';
679 ERROR:  invalid input syntax for type date: "99-08-Jan"
680 LINE 1: SELECT date '99-08-Jan';
681                     ^
682 SELECT date '1999-08-Jan';
683 ERROR:  invalid input syntax for type date: "1999-08-Jan"
684 LINE 1: SELECT date '1999-08-Jan';
685                     ^
686 SELECT date '99 Jan 08';
687 ERROR:  invalid input syntax for type date: "99 Jan 08"
688 LINE 1: SELECT date '99 Jan 08';
689                     ^
690 SELECT date '1999 Jan 08';
691     date    
692 ------------
693  1999-01-08
694 (1 row)
696 SELECT date '08 Jan 99';
697     date    
698 ------------
699  1999-01-08
700 (1 row)
702 SELECT date '08 Jan 1999';
703     date    
704 ------------
705  1999-01-08
706 (1 row)
708 SELECT date 'Jan 08 99';
709     date    
710 ------------
711  1999-01-08
712 (1 row)
714 SELECT date 'Jan 08 1999';
715     date    
716 ------------
717  1999-01-08
718 (1 row)
720 SELECT date '99 08 Jan';
721 ERROR:  invalid input syntax for type date: "99 08 Jan"
722 LINE 1: SELECT date '99 08 Jan';
723                     ^
724 SELECT date '1999 08 Jan';
725     date    
726 ------------
727  1999-01-08
728 (1 row)
730 SELECT date '99-01-08';
731 ERROR:  date/time field value out of range: "99-01-08"
732 LINE 1: SELECT date '99-01-08';
733                     ^
734 HINT:  Perhaps you need a different "DateStyle" setting.
735 SELECT date '1999-01-08';
736     date    
737 ------------
738  1999-01-08
739 (1 row)
741 SELECT date '08-01-99';
742     date    
743 ------------
744  1999-08-01
745 (1 row)
747 SELECT date '08-01-1999';
748     date    
749 ------------
750  1999-08-01
751 (1 row)
753 SELECT date '01-08-99';
754     date    
755 ------------
756  1999-01-08
757 (1 row)
759 SELECT date '01-08-1999';
760     date    
761 ------------
762  1999-01-08
763 (1 row)
765 SELECT date '99-08-01';
766 ERROR:  date/time field value out of range: "99-08-01"
767 LINE 1: SELECT date '99-08-01';
768                     ^
769 HINT:  Perhaps you need a different "DateStyle" setting.
770 SELECT date '1999-08-01';
771     date    
772 ------------
773  1999-08-01
774 (1 row)
776 SELECT date '99 01 08';
777 ERROR:  date/time field value out of range: "99 01 08"
778 LINE 1: SELECT date '99 01 08';
779                     ^
780 HINT:  Perhaps you need a different "DateStyle" setting.
781 SELECT date '1999 01 08';
782     date    
783 ------------
784  1999-01-08
785 (1 row)
787 SELECT date '08 01 99';
788     date    
789 ------------
790  1999-08-01
791 (1 row)
793 SELECT date '08 01 1999';
794     date    
795 ------------
796  1999-08-01
797 (1 row)
799 SELECT date '01 08 99';
800     date    
801 ------------
802  1999-01-08
803 (1 row)
805 SELECT date '01 08 1999';
806     date    
807 ------------
808  1999-01-08
809 (1 row)
811 SELECT date '99 08 01';
812 ERROR:  date/time field value out of range: "99 08 01"
813 LINE 1: SELECT date '99 08 01';
814                     ^
815 HINT:  Perhaps you need a different "DateStyle" setting.
816 SELECT date '1999 08 01';
817     date    
818 ------------
819  1999-08-01
820 (1 row)
822 -- Check upper and lower limits of date range
823 SELECT date '4714-11-24 BC';
824      date      
825 ---------------
826  4714-11-24 BC
827 (1 row)
829 SELECT date '4714-11-23 BC';  -- out of range
830 ERROR:  date out of range: "4714-11-23 BC"
831 LINE 1: SELECT date '4714-11-23 BC';
832                     ^
833 SELECT date '5874897-12-31';
834      date      
835 ---------------
836  5874897-12-31
837 (1 row)
839 SELECT date '5874898-01-01';  -- out of range
840 ERROR:  date out of range: "5874898-01-01"
841 LINE 1: SELECT date '5874898-01-01';
842                     ^
843 -- Test non-error-throwing API
844 SELECT pg_input_is_valid('now', 'date');
845  pg_input_is_valid 
846 -------------------
848 (1 row)
850 SELECT pg_input_is_valid('garbage', 'date');
851  pg_input_is_valid 
852 -------------------
854 (1 row)
856 SELECT pg_input_is_valid('6874898-01-01', 'date');
857  pg_input_is_valid 
858 -------------------
860 (1 row)
862 SELECT * FROM pg_input_error_info('garbage', 'date');
863                     message                    | detail | hint | sql_error_code 
864 -----------------------------------------------+--------+------+----------------
865  invalid input syntax for type date: "garbage" |        |      | 22007
866 (1 row)
868 SELECT * FROM pg_input_error_info('6874898-01-01', 'date');
869               message               | detail | hint | sql_error_code 
870 ------------------------------------+--------+------+----------------
871  date out of range: "6874898-01-01" |        |      | 22008
872 (1 row)
874 RESET datestyle;
876 -- Simple math
877 -- Leave most of it for the horology tests
879 SELECT f1 - date '2000-01-01' AS "Days From 2K" FROM DATE_TBL;
880  Days From 2K 
881 --------------
882        -15607
883        -15542
884         -1403
885         -1402
886         -1401
887         -1400
888         -1037
889         -1036
890         -1035
891            91
892            92
893            93
894         13977
895         14343
896         14710
897      -1475115
898 (16 rows)
900 SELECT f1 - date 'epoch' AS "Days From Epoch" FROM DATE_TBL;
901  Days From Epoch 
902 -----------------
903            -4650
904            -4585
905             9554
906             9555
907             9556
908             9557
909             9920
910             9921
911             9922
912            11048
913            11049
914            11050
915            24934
916            25300
917            25667
918         -1464158
919 (16 rows)
921 SELECT date 'yesterday' - date 'today' AS "One day";
922  One day 
923 ---------
924       -1
925 (1 row)
927 SELECT date 'today' - date 'tomorrow' AS "One day";
928  One day 
929 ---------
930       -1
931 (1 row)
933 SELECT date 'yesterday' - date 'tomorrow' AS "Two days";
934  Two days 
935 ----------
936        -2
937 (1 row)
939 SELECT date 'tomorrow' - date 'today' AS "One day";
940  One day 
941 ---------
942        1
943 (1 row)
945 SELECT date 'today' - date 'yesterday' AS "One day";
946  One day 
947 ---------
948        1
949 (1 row)
951 SELECT date 'tomorrow' - date 'yesterday' AS "Two days";
952  Two days 
953 ----------
954         2
955 (1 row)
958 -- test extract!
960 SELECT f1 as "date",
961     date_part('year', f1) AS year,
962     date_part('month', f1) AS month,
963     date_part('day', f1) AS day,
964     date_part('quarter', f1) AS quarter,
965     date_part('decade', f1) AS decade,
966     date_part('century', f1) AS century,
967     date_part('millennium', f1) AS millennium,
968     date_part('isoyear', f1) AS isoyear,
969     date_part('week', f1) AS week,
970     date_part('dow', f1) AS dow,
971     date_part('isodow', f1) AS isodow,
972     date_part('doy', f1) AS doy,
973     date_part('julian', f1) AS julian,
974     date_part('epoch', f1) AS epoch
975     FROM date_tbl;
976      date      | year  | month | day | quarter | decade | century | millennium | isoyear | week | dow | isodow | doy | julian  |     epoch     
977 ---------------+-------+-------+-----+---------+--------+---------+------------+---------+------+-----+--------+-----+---------+---------------
978  04-09-1957    |  1957 |     4 |   9 |       2 |    195 |      20 |          2 |    1957 |   15 |   2 |      2 |  99 | 2435938 |    -401760000
979  06-13-1957    |  1957 |     6 |  13 |       2 |    195 |      20 |          2 |    1957 |   24 |   4 |      4 | 164 | 2436003 |    -396144000
980  02-28-1996    |  1996 |     2 |  28 |       1 |    199 |      20 |          2 |    1996 |    9 |   3 |      3 |  59 | 2450142 |     825465600
981  02-29-1996    |  1996 |     2 |  29 |       1 |    199 |      20 |          2 |    1996 |    9 |   4 |      4 |  60 | 2450143 |     825552000
982  03-01-1996    |  1996 |     3 |   1 |       1 |    199 |      20 |          2 |    1996 |    9 |   5 |      5 |  61 | 2450144 |     825638400
983  03-02-1996    |  1996 |     3 |   2 |       1 |    199 |      20 |          2 |    1996 |    9 |   6 |      6 |  62 | 2450145 |     825724800
984  02-28-1997    |  1997 |     2 |  28 |       1 |    199 |      20 |          2 |    1997 |    9 |   5 |      5 |  59 | 2450508 |     857088000
985  03-01-1997    |  1997 |     3 |   1 |       1 |    199 |      20 |          2 |    1997 |    9 |   6 |      6 |  60 | 2450509 |     857174400
986  03-02-1997    |  1997 |     3 |   2 |       1 |    199 |      20 |          2 |    1997 |    9 |   0 |      7 |  61 | 2450510 |     857260800
987  04-01-2000    |  2000 |     4 |   1 |       2 |    200 |      20 |          2 |    2000 |   13 |   6 |      6 |  92 | 2451636 |     954547200
988  04-02-2000    |  2000 |     4 |   2 |       2 |    200 |      20 |          2 |    2000 |   13 |   0 |      7 |  93 | 2451637 |     954633600
989  04-03-2000    |  2000 |     4 |   3 |       2 |    200 |      20 |          2 |    2000 |   14 |   1 |      1 |  94 | 2451638 |     954720000
990  04-08-2038    |  2038 |     4 |   8 |       2 |    203 |      21 |          3 |    2038 |   14 |   4 |      4 |  98 | 2465522 |    2154297600
991  04-09-2039    |  2039 |     4 |   9 |       2 |    203 |      21 |          3 |    2039 |   14 |   6 |      6 |  99 | 2465888 |    2185920000
992  04-10-2040    |  2040 |     4 |  10 |       2 |    204 |      21 |          3 |    2040 |   15 |   2 |      2 | 101 | 2466255 |    2217628800
993  04-10-2040 BC | -2040 |     4 |  10 |       2 |   -204 |     -21 |         -3 |   -2040 |   15 |   1 |      1 | 100 |  976430 | -126503251200
994 (16 rows)
997 -- epoch
999 SELECT EXTRACT(EPOCH FROM DATE        '1970-01-01');     --  0
1000  extract 
1001 ---------
1002        0
1003 (1 row)
1006 -- century
1008 SELECT EXTRACT(CENTURY FROM DATE '0101-12-31 BC'); -- -2
1009  extract 
1010 ---------
1011       -2
1012 (1 row)
1014 SELECT EXTRACT(CENTURY FROM DATE '0100-12-31 BC'); -- -1
1015  extract 
1016 ---------
1017       -1
1018 (1 row)
1020 SELECT EXTRACT(CENTURY FROM DATE '0001-12-31 BC'); -- -1
1021  extract 
1022 ---------
1023       -1
1024 (1 row)
1026 SELECT EXTRACT(CENTURY FROM DATE '0001-01-01');    --  1
1027  extract 
1028 ---------
1029        1
1030 (1 row)
1032 SELECT EXTRACT(CENTURY FROM DATE '0001-01-01 AD'); --  1
1033  extract 
1034 ---------
1035        1
1036 (1 row)
1038 SELECT EXTRACT(CENTURY FROM DATE '1900-12-31');    -- 19
1039  extract 
1040 ---------
1041       19
1042 (1 row)
1044 SELECT EXTRACT(CENTURY FROM DATE '1901-01-01');    -- 20
1045  extract 
1046 ---------
1047       20
1048 (1 row)
1050 SELECT EXTRACT(CENTURY FROM DATE '2000-12-31');    -- 20
1051  extract 
1052 ---------
1053       20
1054 (1 row)
1056 SELECT EXTRACT(CENTURY FROM DATE '2001-01-01');    -- 21
1057  extract 
1058 ---------
1059       21
1060 (1 row)
1062 SELECT EXTRACT(CENTURY FROM CURRENT_DATE)>=21 AS True;     -- true
1063  true 
1064 ------
1066 (1 row)
1069 -- millennium
1071 SELECT EXTRACT(MILLENNIUM FROM DATE '0001-12-31 BC'); -- -1
1072  extract 
1073 ---------
1074       -1
1075 (1 row)
1077 SELECT EXTRACT(MILLENNIUM FROM DATE '0001-01-01 AD'); --  1
1078  extract 
1079 ---------
1080        1
1081 (1 row)
1083 SELECT EXTRACT(MILLENNIUM FROM DATE '1000-12-31');    --  1
1084  extract 
1085 ---------
1086        1
1087 (1 row)
1089 SELECT EXTRACT(MILLENNIUM FROM DATE '1001-01-01');    --  2
1090  extract 
1091 ---------
1092        2
1093 (1 row)
1095 SELECT EXTRACT(MILLENNIUM FROM DATE '2000-12-31');    --  2
1096  extract 
1097 ---------
1098        2
1099 (1 row)
1101 SELECT EXTRACT(MILLENNIUM FROM DATE '2001-01-01');    --  3
1102  extract 
1103 ---------
1104        3
1105 (1 row)
1107 -- next test to be fixed on the turn of the next millennium;-)
1108 SELECT EXTRACT(MILLENNIUM FROM CURRENT_DATE);         --  3
1109  extract 
1110 ---------
1111        3
1112 (1 row)
1115 -- decade
1117 SELECT EXTRACT(DECADE FROM DATE '1994-12-25');    -- 199
1118  extract 
1119 ---------
1120      199
1121 (1 row)
1123 SELECT EXTRACT(DECADE FROM DATE '0010-01-01');    --   1
1124  extract 
1125 ---------
1126        1
1127 (1 row)
1129 SELECT EXTRACT(DECADE FROM DATE '0009-12-31');    --   0
1130  extract 
1131 ---------
1132        0
1133 (1 row)
1135 SELECT EXTRACT(DECADE FROM DATE '0001-01-01 BC'); --   0
1136  extract 
1137 ---------
1138        0
1139 (1 row)
1141 SELECT EXTRACT(DECADE FROM DATE '0002-12-31 BC'); --  -1
1142  extract 
1143 ---------
1144       -1
1145 (1 row)
1147 SELECT EXTRACT(DECADE FROM DATE '0011-01-01 BC'); --  -1
1148  extract 
1149 ---------
1150       -1
1151 (1 row)
1153 SELECT EXTRACT(DECADE FROM DATE '0012-12-31 BC'); --  -2
1154  extract 
1155 ---------
1156       -2
1157 (1 row)
1160 -- all possible fields
1162 SELECT EXTRACT(MICROSECONDS  FROM DATE '2020-08-11');
1163 ERROR:  unit "microseconds" not supported for type date
1164 SELECT EXTRACT(MILLISECONDS  FROM DATE '2020-08-11');
1165 ERROR:  unit "milliseconds" not supported for type date
1166 SELECT EXTRACT(SECOND        FROM DATE '2020-08-11');
1167 ERROR:  unit "second" not supported for type date
1168 SELECT EXTRACT(MINUTE        FROM DATE '2020-08-11');
1169 ERROR:  unit "minute" not supported for type date
1170 SELECT EXTRACT(HOUR          FROM DATE '2020-08-11');
1171 ERROR:  unit "hour" not supported for type date
1172 SELECT EXTRACT(DAY           FROM DATE '2020-08-11');
1173  extract 
1174 ---------
1175       11
1176 (1 row)
1178 SELECT EXTRACT(MONTH         FROM DATE '2020-08-11');
1179  extract 
1180 ---------
1181        8
1182 (1 row)
1184 SELECT EXTRACT(YEAR          FROM DATE '2020-08-11');
1185  extract 
1186 ---------
1187     2020
1188 (1 row)
1190 SELECT EXTRACT(YEAR          FROM DATE '2020-08-11 BC');
1191  extract 
1192 ---------
1193    -2020
1194 (1 row)
1196 SELECT EXTRACT(DECADE        FROM DATE '2020-08-11');
1197  extract 
1198 ---------
1199      202
1200 (1 row)
1202 SELECT EXTRACT(CENTURY       FROM DATE '2020-08-11');
1203  extract 
1204 ---------
1205       21
1206 (1 row)
1208 SELECT EXTRACT(MILLENNIUM    FROM DATE '2020-08-11');
1209  extract 
1210 ---------
1211        3
1212 (1 row)
1214 SELECT EXTRACT(ISOYEAR       FROM DATE '2020-08-11');
1215  extract 
1216 ---------
1217     2020
1218 (1 row)
1220 SELECT EXTRACT(ISOYEAR       FROM DATE '2020-08-11 BC');
1221  extract 
1222 ---------
1223    -2020
1224 (1 row)
1226 SELECT EXTRACT(QUARTER       FROM DATE '2020-08-11');
1227  extract 
1228 ---------
1229        3
1230 (1 row)
1232 SELECT EXTRACT(WEEK          FROM DATE '2020-08-11');
1233  extract 
1234 ---------
1235       33
1236 (1 row)
1238 SELECT EXTRACT(DOW           FROM DATE '2020-08-11');
1239  extract 
1240 ---------
1241        2
1242 (1 row)
1244 SELECT EXTRACT(DOW           FROM DATE '2020-08-16');
1245  extract 
1246 ---------
1247        0
1248 (1 row)
1250 SELECT EXTRACT(ISODOW        FROM DATE '2020-08-11');
1251  extract 
1252 ---------
1253        2
1254 (1 row)
1256 SELECT EXTRACT(ISODOW        FROM DATE '2020-08-16');
1257  extract 
1258 ---------
1259        7
1260 (1 row)
1262 SELECT EXTRACT(DOY           FROM DATE '2020-08-11');
1263  extract 
1264 ---------
1265      224
1266 (1 row)
1268 SELECT EXTRACT(TIMEZONE      FROM DATE '2020-08-11');
1269 ERROR:  unit "timezone" not supported for type date
1270 SELECT EXTRACT(TIMEZONE_M    FROM DATE '2020-08-11');
1271 ERROR:  unit "timezone_m" not supported for type date
1272 SELECT EXTRACT(TIMEZONE_H    FROM DATE '2020-08-11');
1273 ERROR:  unit "timezone_h" not supported for type date
1274 SELECT EXTRACT(EPOCH         FROM DATE '2020-08-11');
1275   extract   
1276 ------------
1277  1597104000
1278 (1 row)
1280 SELECT EXTRACT(JULIAN        FROM DATE '2020-08-11');
1281  extract 
1282 ---------
1283  2459073
1284 (1 row)
1287 -- test trunc function!
1289 SELECT DATE_TRUNC('MILLENNIUM', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1001
1290         date_trunc        
1291 --------------------------
1292  Thu Jan 01 00:00:00 1001
1293 (1 row)
1295 SELECT DATE_TRUNC('MILLENNIUM', DATE '1970-03-20'); -- 1001-01-01
1296           date_trunc          
1297 ------------------------------
1298  Thu Jan 01 00:00:00 1001 LMT
1299 (1 row)
1301 SELECT DATE_TRUNC('CENTURY', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1901
1302         date_trunc        
1303 --------------------------
1304  Tue Jan 01 00:00:00 1901
1305 (1 row)
1307 SELECT DATE_TRUNC('CENTURY', DATE '1970-03-20'); -- 1901
1308           date_trunc          
1309 ------------------------------
1310  Tue Jan 01 00:00:00 1901 PST
1311 (1 row)
1313 SELECT DATE_TRUNC('CENTURY', DATE '2004-08-10'); -- 2001-01-01
1314           date_trunc          
1315 ------------------------------
1316  Mon Jan 01 00:00:00 2001 PST
1317 (1 row)
1319 SELECT DATE_TRUNC('CENTURY', DATE '0002-02-04'); -- 0001-01-01
1320           date_trunc          
1321 ------------------------------
1322  Mon Jan 01 00:00:00 0001 LMT
1323 (1 row)
1325 SELECT DATE_TRUNC('CENTURY', DATE '0055-08-10 BC'); -- 0100-01-01 BC
1326            date_trunc            
1327 ---------------------------------
1328  Tue Jan 01 00:00:00 0100 LMT BC
1329 (1 row)
1331 SELECT DATE_TRUNC('DECADE', DATE '1993-12-25'); -- 1990-01-01
1332           date_trunc          
1333 ------------------------------
1334  Mon Jan 01 00:00:00 1990 PST
1335 (1 row)
1337 SELECT DATE_TRUNC('DECADE', DATE '0004-12-25'); -- 0001-01-01 BC
1338            date_trunc            
1339 ---------------------------------
1340  Sat Jan 01 00:00:00 0001 LMT BC
1341 (1 row)
1343 SELECT DATE_TRUNC('DECADE', DATE '0002-12-31 BC'); -- 0011-01-01 BC
1344            date_trunc            
1345 ---------------------------------
1346  Mon Jan 01 00:00:00 0011 LMT BC
1347 (1 row)
1350 -- test infinity
1352 select 'infinity'::date, '-infinity'::date;
1353    date   |   date    
1354 ----------+-----------
1355  infinity | -infinity
1356 (1 row)
1358 select 'infinity'::date > 'today'::date as t;
1359  t 
1362 (1 row)
1364 select '-infinity'::date < 'today'::date as t;
1365  t 
1368 (1 row)
1370 select isfinite('infinity'::date), isfinite('-infinity'::date), isfinite('today'::date);
1371  isfinite | isfinite | isfinite 
1372 ----------+----------+----------
1373  f        | f        | t
1374 (1 row)
1376 select 'infinity'::date = '+infinity'::date as t;
1377  t 
1380 (1 row)
1383 -- oscillating fields from non-finite date:
1385 SELECT EXTRACT(DAY FROM DATE 'infinity');      -- NULL
1386  extract 
1387 ---------
1388         
1389 (1 row)
1391 SELECT EXTRACT(DAY FROM DATE '-infinity');     -- NULL
1392  extract 
1393 ---------
1394         
1395 (1 row)
1397 -- all supported fields
1398 SELECT EXTRACT(DAY           FROM DATE 'infinity');    -- NULL
1399  extract 
1400 ---------
1401         
1402 (1 row)
1404 SELECT EXTRACT(MONTH         FROM DATE 'infinity');    -- NULL
1405  extract 
1406 ---------
1407         
1408 (1 row)
1410 SELECT EXTRACT(QUARTER       FROM DATE 'infinity');    -- NULL
1411  extract 
1412 ---------
1413         
1414 (1 row)
1416 SELECT EXTRACT(WEEK          FROM DATE 'infinity');    -- NULL
1417  extract 
1418 ---------
1419         
1420 (1 row)
1422 SELECT EXTRACT(DOW           FROM DATE 'infinity');    -- NULL
1423  extract 
1424 ---------
1425         
1426 (1 row)
1428 SELECT EXTRACT(ISODOW        FROM DATE 'infinity');    -- NULL
1429  extract 
1430 ---------
1431         
1432 (1 row)
1434 SELECT EXTRACT(DOY           FROM DATE 'infinity');    -- NULL
1435  extract 
1436 ---------
1437         
1438 (1 row)
1441 -- monotonic fields from non-finite date:
1443 SELECT EXTRACT(EPOCH FROM DATE 'infinity');         --  Infinity
1444  extract  
1445 ----------
1446  Infinity
1447 (1 row)
1449 SELECT EXTRACT(EPOCH FROM DATE '-infinity');        -- -Infinity
1450   extract  
1451 -----------
1452  -Infinity
1453 (1 row)
1455 -- all supported fields
1456 SELECT EXTRACT(YEAR       FROM DATE 'infinity');    --  Infinity
1457  extract  
1458 ----------
1459  Infinity
1460 (1 row)
1462 SELECT EXTRACT(DECADE     FROM DATE 'infinity');    --  Infinity
1463  extract  
1464 ----------
1465  Infinity
1466 (1 row)
1468 SELECT EXTRACT(CENTURY    FROM DATE 'infinity');    --  Infinity
1469  extract  
1470 ----------
1471  Infinity
1472 (1 row)
1474 SELECT EXTRACT(MILLENNIUM FROM DATE 'infinity');    --  Infinity
1475  extract  
1476 ----------
1477  Infinity
1478 (1 row)
1480 SELECT EXTRACT(JULIAN     FROM DATE 'infinity');    --  Infinity
1481  extract  
1482 ----------
1483  Infinity
1484 (1 row)
1486 SELECT EXTRACT(ISOYEAR    FROM DATE 'infinity');    --  Infinity
1487  extract  
1488 ----------
1489  Infinity
1490 (1 row)
1492 SELECT EXTRACT(EPOCH      FROM DATE 'infinity');    --  Infinity
1493  extract  
1494 ----------
1495  Infinity
1496 (1 row)
1499 -- wrong fields from non-finite date:
1501 SELECT EXTRACT(MICROSEC  FROM DATE 'infinity');     -- error
1502 ERROR:  unit "microsec" not recognized for type date
1503 -- test constructors
1504 select make_date(2013, 7, 15);
1505  make_date  
1506 ------------
1507  07-15-2013
1508 (1 row)
1510 select make_date(-44, 3, 15);
1511    make_date   
1512 ---------------
1513  03-15-0044 BC
1514 (1 row)
1516 select make_time(8, 20, 0.0);
1517  make_time 
1518 -----------
1519  08:20:00
1520 (1 row)
1522 -- should fail
1523 select make_date(0, 7, 15);
1524 ERROR:  date field value out of range: 0-07-15
1525 select make_date(2013, 2, 30);
1526 ERROR:  date field value out of range: 2013-02-30
1527 select make_date(2013, 13, 1);
1528 ERROR:  date field value out of range: 2013-13-01
1529 select make_date(2013, 11, -1);
1530 ERROR:  date field value out of range: 2013-11--1
1531 SELECT make_date(-2147483648, 1, 1);
1532 ERROR:  date field value out of range: -2147483648-01-01
1533 select make_time(10, 55, 100.1);
1534 ERROR:  time field value out of range: 10:55:100.1
1535 select make_time(24, 0, 2.1);
1536 ERROR:  time field value out of range: 24:00:2.1