Consistently use "superuser" instead of "super user"
[pgsql.git] / src / test / regress / expected / date.out
blobc8b0566ff40ce17bc07a9b601e9b44165ee1bad3
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 RESET datestyle;
845 -- Simple math
846 -- Leave most of it for the horology tests
848 SELECT f1 - date '2000-01-01' AS "Days From 2K" FROM DATE_TBL;
849  Days From 2K 
850 --------------
851        -15607
852        -15542
853         -1403
854         -1402
855         -1401
856         -1400
857         -1037
858         -1036
859         -1035
860            91
861            92
862            93
863         13977
864         14343
865         14710
866      -1475115
867 (16 rows)
869 SELECT f1 - date 'epoch' AS "Days From Epoch" FROM DATE_TBL;
870  Days From Epoch 
871 -----------------
872            -4650
873            -4585
874             9554
875             9555
876             9556
877             9557
878             9920
879             9921
880             9922
881            11048
882            11049
883            11050
884            24934
885            25300
886            25667
887         -1464158
888 (16 rows)
890 SELECT date 'yesterday' - date 'today' AS "One day";
891  One day 
892 ---------
893       -1
894 (1 row)
896 SELECT date 'today' - date 'tomorrow' AS "One day";
897  One day 
898 ---------
899       -1
900 (1 row)
902 SELECT date 'yesterday' - date 'tomorrow' AS "Two days";
903  Two days 
904 ----------
905        -2
906 (1 row)
908 SELECT date 'tomorrow' - date 'today' AS "One day";
909  One day 
910 ---------
911        1
912 (1 row)
914 SELECT date 'today' - date 'yesterday' AS "One day";
915  One day 
916 ---------
917        1
918 (1 row)
920 SELECT date 'tomorrow' - date 'yesterday' AS "Two days";
921  Two days 
922 ----------
923         2
924 (1 row)
927 -- test extract!
929 SELECT f1 as "date",
930     date_part('year', f1) AS year,
931     date_part('month', f1) AS month,
932     date_part('day', f1) AS day,
933     date_part('quarter', f1) AS quarter,
934     date_part('decade', f1) AS decade,
935     date_part('century', f1) AS century,
936     date_part('millennium', f1) AS millennium,
937     date_part('isoyear', f1) AS isoyear,
938     date_part('week', f1) AS week,
939     date_part('dow', f1) AS dow,
940     date_part('isodow', f1) AS isodow,
941     date_part('doy', f1) AS doy,
942     date_part('julian', f1) AS julian,
943     date_part('epoch', f1) AS epoch
944     FROM date_tbl;
945      date      | year  | month | day | quarter | decade | century | millennium | isoyear | week | dow | isodow | doy | julian  |     epoch     
946 ---------------+-------+-------+-----+---------+--------+---------+------------+---------+------+-----+--------+-----+---------+---------------
947  04-09-1957    |  1957 |     4 |   9 |       2 |    195 |      20 |          2 |    1957 |   15 |   2 |      2 |  99 | 2435938 |    -401760000
948  06-13-1957    |  1957 |     6 |  13 |       2 |    195 |      20 |          2 |    1957 |   24 |   4 |      4 | 164 | 2436003 |    -396144000
949  02-28-1996    |  1996 |     2 |  28 |       1 |    199 |      20 |          2 |    1996 |    9 |   3 |      3 |  59 | 2450142 |     825465600
950  02-29-1996    |  1996 |     2 |  29 |       1 |    199 |      20 |          2 |    1996 |    9 |   4 |      4 |  60 | 2450143 |     825552000
951  03-01-1996    |  1996 |     3 |   1 |       1 |    199 |      20 |          2 |    1996 |    9 |   5 |      5 |  61 | 2450144 |     825638400
952  03-02-1996    |  1996 |     3 |   2 |       1 |    199 |      20 |          2 |    1996 |    9 |   6 |      6 |  62 | 2450145 |     825724800
953  02-28-1997    |  1997 |     2 |  28 |       1 |    199 |      20 |          2 |    1997 |    9 |   5 |      5 |  59 | 2450508 |     857088000
954  03-01-1997    |  1997 |     3 |   1 |       1 |    199 |      20 |          2 |    1997 |    9 |   6 |      6 |  60 | 2450509 |     857174400
955  03-02-1997    |  1997 |     3 |   2 |       1 |    199 |      20 |          2 |    1997 |    9 |   0 |      7 |  61 | 2450510 |     857260800
956  04-01-2000    |  2000 |     4 |   1 |       2 |    200 |      20 |          2 |    2000 |   13 |   6 |      6 |  92 | 2451636 |     954547200
957  04-02-2000    |  2000 |     4 |   2 |       2 |    200 |      20 |          2 |    2000 |   13 |   0 |      7 |  93 | 2451637 |     954633600
958  04-03-2000    |  2000 |     4 |   3 |       2 |    200 |      20 |          2 |    2000 |   14 |   1 |      1 |  94 | 2451638 |     954720000
959  04-08-2038    |  2038 |     4 |   8 |       2 |    203 |      21 |          3 |    2038 |   14 |   4 |      4 |  98 | 2465522 |    2154297600
960  04-09-2039    |  2039 |     4 |   9 |       2 |    203 |      21 |          3 |    2039 |   14 |   6 |      6 |  99 | 2465888 |    2185920000
961  04-10-2040    |  2040 |     4 |  10 |       2 |    204 |      21 |          3 |    2040 |   15 |   2 |      2 | 101 | 2466255 |    2217628800
962  04-10-2040 BC | -2040 |     4 |  10 |       2 |   -204 |     -21 |         -3 |   -2040 |   15 |   1 |      1 | 100 |  976430 | -126503251200
963 (16 rows)
966 -- epoch
968 SELECT EXTRACT(EPOCH FROM DATE        '1970-01-01');     --  0
969  extract 
970 ---------
971        0
972 (1 row)
975 -- century
977 SELECT EXTRACT(CENTURY FROM DATE '0101-12-31 BC'); -- -2
978  extract 
979 ---------
980       -2
981 (1 row)
983 SELECT EXTRACT(CENTURY FROM DATE '0100-12-31 BC'); -- -1
984  extract 
985 ---------
986       -1
987 (1 row)
989 SELECT EXTRACT(CENTURY FROM DATE '0001-12-31 BC'); -- -1
990  extract 
991 ---------
992       -1
993 (1 row)
995 SELECT EXTRACT(CENTURY FROM DATE '0001-01-01');    --  1
996  extract 
997 ---------
998        1
999 (1 row)
1001 SELECT EXTRACT(CENTURY FROM DATE '0001-01-01 AD'); --  1
1002  extract 
1003 ---------
1004        1
1005 (1 row)
1007 SELECT EXTRACT(CENTURY FROM DATE '1900-12-31');    -- 19
1008  extract 
1009 ---------
1010       19
1011 (1 row)
1013 SELECT EXTRACT(CENTURY FROM DATE '1901-01-01');    -- 20
1014  extract 
1015 ---------
1016       20
1017 (1 row)
1019 SELECT EXTRACT(CENTURY FROM DATE '2000-12-31');    -- 20
1020  extract 
1021 ---------
1022       20
1023 (1 row)
1025 SELECT EXTRACT(CENTURY FROM DATE '2001-01-01');    -- 21
1026  extract 
1027 ---------
1028       21
1029 (1 row)
1031 SELECT EXTRACT(CENTURY FROM CURRENT_DATE)>=21 AS True;     -- true
1032  true 
1033 ------
1035 (1 row)
1038 -- millennium
1040 SELECT EXTRACT(MILLENNIUM FROM DATE '0001-12-31 BC'); -- -1
1041  extract 
1042 ---------
1043       -1
1044 (1 row)
1046 SELECT EXTRACT(MILLENNIUM FROM DATE '0001-01-01 AD'); --  1
1047  extract 
1048 ---------
1049        1
1050 (1 row)
1052 SELECT EXTRACT(MILLENNIUM FROM DATE '1000-12-31');    --  1
1053  extract 
1054 ---------
1055        1
1056 (1 row)
1058 SELECT EXTRACT(MILLENNIUM FROM DATE '1001-01-01');    --  2
1059  extract 
1060 ---------
1061        2
1062 (1 row)
1064 SELECT EXTRACT(MILLENNIUM FROM DATE '2000-12-31');    --  2
1065  extract 
1066 ---------
1067        2
1068 (1 row)
1070 SELECT EXTRACT(MILLENNIUM FROM DATE '2001-01-01');    --  3
1071  extract 
1072 ---------
1073        3
1074 (1 row)
1076 -- next test to be fixed on the turn of the next millennium;-)
1077 SELECT EXTRACT(MILLENNIUM FROM CURRENT_DATE);         --  3
1078  extract 
1079 ---------
1080        3
1081 (1 row)
1084 -- decade
1086 SELECT EXTRACT(DECADE FROM DATE '1994-12-25');    -- 199
1087  extract 
1088 ---------
1089      199
1090 (1 row)
1092 SELECT EXTRACT(DECADE FROM DATE '0010-01-01');    --   1
1093  extract 
1094 ---------
1095        1
1096 (1 row)
1098 SELECT EXTRACT(DECADE FROM DATE '0009-12-31');    --   0
1099  extract 
1100 ---------
1101        0
1102 (1 row)
1104 SELECT EXTRACT(DECADE FROM DATE '0001-01-01 BC'); --   0
1105  extract 
1106 ---------
1107        0
1108 (1 row)
1110 SELECT EXTRACT(DECADE FROM DATE '0002-12-31 BC'); --  -1
1111  extract 
1112 ---------
1113       -1
1114 (1 row)
1116 SELECT EXTRACT(DECADE FROM DATE '0011-01-01 BC'); --  -1
1117  extract 
1118 ---------
1119       -1
1120 (1 row)
1122 SELECT EXTRACT(DECADE FROM DATE '0012-12-31 BC'); --  -2
1123  extract 
1124 ---------
1125       -2
1126 (1 row)
1129 -- all possible fields
1131 SELECT EXTRACT(MICROSECONDS  FROM DATE '2020-08-11');
1132 ERROR:  date units "microseconds" not supported
1133 SELECT EXTRACT(MILLISECONDS  FROM DATE '2020-08-11');
1134 ERROR:  date units "milliseconds" not supported
1135 SELECT EXTRACT(SECOND        FROM DATE '2020-08-11');
1136 ERROR:  date units "second" not supported
1137 SELECT EXTRACT(MINUTE        FROM DATE '2020-08-11');
1138 ERROR:  date units "minute" not supported
1139 SELECT EXTRACT(HOUR          FROM DATE '2020-08-11');
1140 ERROR:  date units "hour" not supported
1141 SELECT EXTRACT(DAY           FROM DATE '2020-08-11');
1142  extract 
1143 ---------
1144       11
1145 (1 row)
1147 SELECT EXTRACT(MONTH         FROM DATE '2020-08-11');
1148  extract 
1149 ---------
1150        8
1151 (1 row)
1153 SELECT EXTRACT(YEAR          FROM DATE '2020-08-11');
1154  extract 
1155 ---------
1156     2020
1157 (1 row)
1159 SELECT EXTRACT(YEAR          FROM DATE '2020-08-11 BC');
1160  extract 
1161 ---------
1162    -2020
1163 (1 row)
1165 SELECT EXTRACT(DECADE        FROM DATE '2020-08-11');
1166  extract 
1167 ---------
1168      202
1169 (1 row)
1171 SELECT EXTRACT(CENTURY       FROM DATE '2020-08-11');
1172  extract 
1173 ---------
1174       21
1175 (1 row)
1177 SELECT EXTRACT(MILLENNIUM    FROM DATE '2020-08-11');
1178  extract 
1179 ---------
1180        3
1181 (1 row)
1183 SELECT EXTRACT(ISOYEAR       FROM DATE '2020-08-11');
1184  extract 
1185 ---------
1186     2020
1187 (1 row)
1189 SELECT EXTRACT(ISOYEAR       FROM DATE '2020-08-11 BC');
1190  extract 
1191 ---------
1192    -2020
1193 (1 row)
1195 SELECT EXTRACT(QUARTER       FROM DATE '2020-08-11');
1196  extract 
1197 ---------
1198        3
1199 (1 row)
1201 SELECT EXTRACT(WEEK          FROM DATE '2020-08-11');
1202  extract 
1203 ---------
1204       33
1205 (1 row)
1207 SELECT EXTRACT(DOW           FROM DATE '2020-08-11');
1208  extract 
1209 ---------
1210        2
1211 (1 row)
1213 SELECT EXTRACT(DOW           FROM DATE '2020-08-16');
1214  extract 
1215 ---------
1216        0
1217 (1 row)
1219 SELECT EXTRACT(ISODOW        FROM DATE '2020-08-11');
1220  extract 
1221 ---------
1222        2
1223 (1 row)
1225 SELECT EXTRACT(ISODOW        FROM DATE '2020-08-16');
1226  extract 
1227 ---------
1228        7
1229 (1 row)
1231 SELECT EXTRACT(DOY           FROM DATE '2020-08-11');
1232  extract 
1233 ---------
1234      224
1235 (1 row)
1237 SELECT EXTRACT(TIMEZONE      FROM DATE '2020-08-11');
1238 ERROR:  date units "timezone" not supported
1239 SELECT EXTRACT(TIMEZONE_M    FROM DATE '2020-08-11');
1240 ERROR:  date units "timezone_m" not supported
1241 SELECT EXTRACT(TIMEZONE_H    FROM DATE '2020-08-11');
1242 ERROR:  date units "timezone_h" not supported
1243 SELECT EXTRACT(EPOCH         FROM DATE '2020-08-11');
1244   extract   
1245 ------------
1246  1597104000
1247 (1 row)
1249 SELECT EXTRACT(JULIAN        FROM DATE '2020-08-11');
1250  extract 
1251 ---------
1252  2459073
1253 (1 row)
1256 -- test trunc function!
1258 SELECT DATE_TRUNC('MILLENNIUM', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1001
1259         date_trunc        
1260 --------------------------
1261  Thu Jan 01 00:00:00 1001
1262 (1 row)
1264 SELECT DATE_TRUNC('MILLENNIUM', DATE '1970-03-20'); -- 1001-01-01
1265           date_trunc          
1266 ------------------------------
1267  Thu Jan 01 00:00:00 1001 PST
1268 (1 row)
1270 SELECT DATE_TRUNC('CENTURY', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1901
1271         date_trunc        
1272 --------------------------
1273  Tue Jan 01 00:00:00 1901
1274 (1 row)
1276 SELECT DATE_TRUNC('CENTURY', DATE '1970-03-20'); -- 1901
1277           date_trunc          
1278 ------------------------------
1279  Tue Jan 01 00:00:00 1901 PST
1280 (1 row)
1282 SELECT DATE_TRUNC('CENTURY', DATE '2004-08-10'); -- 2001-01-01
1283           date_trunc          
1284 ------------------------------
1285  Mon Jan 01 00:00:00 2001 PST
1286 (1 row)
1288 SELECT DATE_TRUNC('CENTURY', DATE '0002-02-04'); -- 0001-01-01
1289           date_trunc          
1290 ------------------------------
1291  Mon Jan 01 00:00:00 0001 PST
1292 (1 row)
1294 SELECT DATE_TRUNC('CENTURY', DATE '0055-08-10 BC'); -- 0100-01-01 BC
1295            date_trunc            
1296 ---------------------------------
1297  Tue Jan 01 00:00:00 0100 PST BC
1298 (1 row)
1300 SELECT DATE_TRUNC('DECADE', DATE '1993-12-25'); -- 1990-01-01
1301           date_trunc          
1302 ------------------------------
1303  Mon Jan 01 00:00:00 1990 PST
1304 (1 row)
1306 SELECT DATE_TRUNC('DECADE', DATE '0004-12-25'); -- 0001-01-01 BC
1307            date_trunc            
1308 ---------------------------------
1309  Sat Jan 01 00:00:00 0001 PST BC
1310 (1 row)
1312 SELECT DATE_TRUNC('DECADE', DATE '0002-12-31 BC'); -- 0011-01-01 BC
1313            date_trunc            
1314 ---------------------------------
1315  Mon Jan 01 00:00:00 0011 PST BC
1316 (1 row)
1319 -- test infinity
1321 select 'infinity'::date, '-infinity'::date;
1322    date   |   date    
1323 ----------+-----------
1324  infinity | -infinity
1325 (1 row)
1327 select 'infinity'::date > 'today'::date as t;
1328  t 
1331 (1 row)
1333 select '-infinity'::date < 'today'::date as t;
1334  t 
1337 (1 row)
1339 select isfinite('infinity'::date), isfinite('-infinity'::date), isfinite('today'::date);
1340  isfinite | isfinite | isfinite 
1341 ----------+----------+----------
1342  f        | f        | t
1343 (1 row)
1346 -- oscillating fields from non-finite date:
1348 SELECT EXTRACT(DAY FROM DATE 'infinity');      -- NULL
1349  extract 
1350 ---------
1351         
1352 (1 row)
1354 SELECT EXTRACT(DAY FROM DATE '-infinity');     -- NULL
1355  extract 
1356 ---------
1357         
1358 (1 row)
1360 -- all supported fields
1361 SELECT EXTRACT(DAY           FROM DATE 'infinity');    -- NULL
1362  extract 
1363 ---------
1364         
1365 (1 row)
1367 SELECT EXTRACT(MONTH         FROM DATE 'infinity');    -- NULL
1368  extract 
1369 ---------
1370         
1371 (1 row)
1373 SELECT EXTRACT(QUARTER       FROM DATE 'infinity');    -- NULL
1374  extract 
1375 ---------
1376         
1377 (1 row)
1379 SELECT EXTRACT(WEEK          FROM DATE 'infinity');    -- NULL
1380  extract 
1381 ---------
1382         
1383 (1 row)
1385 SELECT EXTRACT(DOW           FROM DATE 'infinity');    -- NULL
1386  extract 
1387 ---------
1388         
1389 (1 row)
1391 SELECT EXTRACT(ISODOW        FROM DATE 'infinity');    -- NULL
1392  extract 
1393 ---------
1394         
1395 (1 row)
1397 SELECT EXTRACT(DOY           FROM DATE 'infinity');    -- NULL
1398  extract 
1399 ---------
1400         
1401 (1 row)
1404 -- monotonic fields from non-finite date:
1406 SELECT EXTRACT(EPOCH FROM DATE 'infinity');         --  Infinity
1407  extract  
1408 ----------
1409  Infinity
1410 (1 row)
1412 SELECT EXTRACT(EPOCH FROM DATE '-infinity');        -- -Infinity
1413   extract  
1414 -----------
1415  -Infinity
1416 (1 row)
1418 -- all supported fields
1419 SELECT EXTRACT(YEAR       FROM DATE 'infinity');    --  Infinity
1420  extract  
1421 ----------
1422  Infinity
1423 (1 row)
1425 SELECT EXTRACT(DECADE     FROM DATE 'infinity');    --  Infinity
1426  extract  
1427 ----------
1428  Infinity
1429 (1 row)
1431 SELECT EXTRACT(CENTURY    FROM DATE 'infinity');    --  Infinity
1432  extract  
1433 ----------
1434  Infinity
1435 (1 row)
1437 SELECT EXTRACT(MILLENNIUM FROM DATE 'infinity');    --  Infinity
1438  extract  
1439 ----------
1440  Infinity
1441 (1 row)
1443 SELECT EXTRACT(JULIAN     FROM DATE 'infinity');    --  Infinity
1444  extract  
1445 ----------
1446  Infinity
1447 (1 row)
1449 SELECT EXTRACT(ISOYEAR    FROM DATE 'infinity');    --  Infinity
1450  extract  
1451 ----------
1452  Infinity
1453 (1 row)
1455 SELECT EXTRACT(EPOCH      FROM DATE 'infinity');    --  Infinity
1456  extract  
1457 ----------
1458  Infinity
1459 (1 row)
1462 -- wrong fields from non-finite date:
1464 SELECT EXTRACT(MICROSEC  FROM DATE 'infinity');     -- error
1465 ERROR:  date units "microsec" not recognized
1466 -- test constructors
1467 select make_date(2013, 7, 15);
1468  make_date  
1469 ------------
1470  07-15-2013
1471 (1 row)
1473 select make_date(-44, 3, 15);
1474    make_date   
1475 ---------------
1476  03-15-0044 BC
1477 (1 row)
1479 select make_time(8, 20, 0.0);
1480  make_time 
1481 -----------
1482  08:20:00
1483 (1 row)
1485 -- should fail
1486 select make_date(0, 7, 15);
1487 ERROR:  date field value out of range: 0-07-15
1488 select make_date(2013, 2, 30);
1489 ERROR:  date field value out of range: 2013-02-30
1490 select make_date(2013, 13, 1);
1491 ERROR:  date field value out of range: 2013-13-01
1492 select make_date(2013, 11, -1);
1493 ERROR:  date field value out of range: 2013-11--1
1494 select make_time(10, 55, 100.1);
1495 ERROR:  time field value out of range: 10:55:100.1
1496 select make_time(24, 0, 2.1);
1497 ERROR:  time field value out of range: 24:00:2.1