]> granicus.if.org Git - postgresql/blob - src/test/regress/expected/date.out
Remove useless whitespace at end of lines
[postgresql] / src / test / regress / expected / date.out
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 SELECT f1 AS "Fifteen" FROM DATE_TBL;
25   Fifteen   
26 ------------
27  04-09-1957
28  06-13-1957
29  02-28-1996
30  02-29-1996
31  03-01-1996
32  03-02-1996
33  02-28-1997
34  03-01-1997
35  03-02-1997
36  04-01-2000
37  04-02-2000
38  04-03-2000
39  04-08-2038
40  04-09-2039
41  04-10-2040
42 (15 rows)
43
44 SELECT f1 AS "Nine" FROM DATE_TBL WHERE f1 < '2000-01-01';
45     Nine    
46 ------------
47  04-09-1957
48  06-13-1957
49  02-28-1996
50  02-29-1996
51  03-01-1996
52  03-02-1996
53  02-28-1997
54  03-01-1997
55  03-02-1997
56 (9 rows)
57
58 SELECT f1 AS "Three" FROM DATE_TBL
59   WHERE f1 BETWEEN '2000-01-01' AND '2001-01-01';
60    Three    
61 ------------
62  04-01-2000
63  04-02-2000
64  04-03-2000
65 (3 rows)
66
67 --
68 -- Check all the documented input formats
69 --
70 SET datestyle TO iso;  -- display results in ISO
71 SET datestyle TO ymd;
72 SELECT date 'January 8, 1999';
73     date    
74 ------------
75  1999-01-08
76 (1 row)
77
78 SELECT date '1999-01-08';
79     date    
80 ------------
81  1999-01-08
82 (1 row)
83
84 SELECT date '1999-01-18';
85     date    
86 ------------
87  1999-01-18
88 (1 row)
89
90 SELECT date '1/8/1999';
91 ERROR:  date/time field value out of range: "1/8/1999"
92 LINE 1: SELECT date '1/8/1999';
93                     ^
94 HINT:  Perhaps you need a different "datestyle" setting.
95 SELECT date '1/18/1999';
96 ERROR:  date/time field value out of range: "1/18/1999"
97 LINE 1: SELECT date '1/18/1999';
98                     ^
99 HINT:  Perhaps you need a different "datestyle" setting.
100 SELECT date '18/1/1999';
101 ERROR:  date/time field value out of range: "18/1/1999"
102 LINE 1: SELECT date '18/1/1999';
103                     ^
104 HINT:  Perhaps you need a different "datestyle" setting.
105 SELECT date '01/02/03';
106     date    
107 ------------
108  2001-02-03
109 (1 row)
110
111 SELECT date '19990108';
112     date    
113 ------------
114  1999-01-08
115 (1 row)
116
117 SELECT date '990108';
118     date    
119 ------------
120  1999-01-08
121 (1 row)
122
123 SELECT date '1999.008';
124     date    
125 ------------
126  1999-01-08
127 (1 row)
128
129 SELECT date 'J2451187';
130     date    
131 ------------
132  1999-01-08
133 (1 row)
134
135 SELECT date 'January 8, 99 BC';
136 ERROR:  date/time field value out of range: "January 8, 99 BC"
137 LINE 1: SELECT date 'January 8, 99 BC';
138                     ^
139 HINT:  Perhaps you need a different "datestyle" setting.
140 SELECT date '99-Jan-08';
141     date    
142 ------------
143  1999-01-08
144 (1 row)
145
146 SELECT date '1999-Jan-08';
147     date    
148 ------------
149  1999-01-08
150 (1 row)
151
152 SELECT date '08-Jan-99';
153 ERROR:  date/time field value out of range: "08-Jan-99"
154 LINE 1: SELECT date '08-Jan-99';
155                     ^
156 HINT:  Perhaps you need a different "datestyle" setting.
157 SELECT date '08-Jan-1999';
158     date    
159 ------------
160  1999-01-08
161 (1 row)
162
163 SELECT date 'Jan-08-99';
164 ERROR:  date/time field value out of range: "Jan-08-99"
165 LINE 1: SELECT date 'Jan-08-99';
166                     ^
167 HINT:  Perhaps you need a different "datestyle" setting.
168 SELECT date 'Jan-08-1999';
169     date    
170 ------------
171  1999-01-08
172 (1 row)
173
174 SELECT date '99-08-Jan';
175 ERROR:  invalid input syntax for type date: "99-08-Jan"
176 LINE 1: SELECT date '99-08-Jan';
177                     ^
178 SELECT date '1999-08-Jan';
179 ERROR:  invalid input syntax for type date: "1999-08-Jan"
180 LINE 1: SELECT date '1999-08-Jan';
181                     ^
182 SELECT date '99 Jan 08';
183     date    
184 ------------
185  1999-01-08
186 (1 row)
187
188 SELECT date '1999 Jan 08';
189     date    
190 ------------
191  1999-01-08
192 (1 row)
193
194 SELECT date '08 Jan 99';
195 ERROR:  date/time field value out of range: "08 Jan 99"
196 LINE 1: SELECT date '08 Jan 99';
197                     ^
198 HINT:  Perhaps you need a different "datestyle" setting.
199 SELECT date '08 Jan 1999';
200     date    
201 ------------
202  1999-01-08
203 (1 row)
204
205 SELECT date 'Jan 08 99';
206 ERROR:  date/time field value out of range: "Jan 08 99"
207 LINE 1: SELECT date 'Jan 08 99';
208                     ^
209 HINT:  Perhaps you need a different "datestyle" setting.
210 SELECT date 'Jan 08 1999';
211     date    
212 ------------
213  1999-01-08
214 (1 row)
215
216 SELECT date '99 08 Jan';
217     date    
218 ------------
219  1999-01-08
220 (1 row)
221
222 SELECT date '1999 08 Jan';
223     date    
224 ------------
225  1999-01-08
226 (1 row)
227
228 SELECT date '99-01-08';
229     date    
230 ------------
231  1999-01-08
232 (1 row)
233
234 SELECT date '1999-01-08';
235     date    
236 ------------
237  1999-01-08
238 (1 row)
239
240 SELECT date '08-01-99';
241 ERROR:  date/time field value out of range: "08-01-99"
242 LINE 1: SELECT date '08-01-99';
243                     ^
244 HINT:  Perhaps you need a different "datestyle" setting.
245 SELECT date '08-01-1999';
246 ERROR:  date/time field value out of range: "08-01-1999"
247 LINE 1: SELECT date '08-01-1999';
248                     ^
249 HINT:  Perhaps you need a different "datestyle" setting.
250 SELECT date '01-08-99';
251 ERROR:  date/time field value out of range: "01-08-99"
252 LINE 1: SELECT date '01-08-99';
253                     ^
254 HINT:  Perhaps you need a different "datestyle" setting.
255 SELECT date '01-08-1999';
256 ERROR:  date/time field value out of range: "01-08-1999"
257 LINE 1: SELECT date '01-08-1999';
258                     ^
259 HINT:  Perhaps you need a different "datestyle" setting.
260 SELECT date '99-08-01';
261     date    
262 ------------
263  1999-08-01
264 (1 row)
265
266 SELECT date '1999-08-01';
267     date    
268 ------------
269  1999-08-01
270 (1 row)
271
272 SELECT date '99 01 08';
273     date    
274 ------------
275  1999-01-08
276 (1 row)
277
278 SELECT date '1999 01 08';
279     date    
280 ------------
281  1999-01-08
282 (1 row)
283
284 SELECT date '08 01 99';
285 ERROR:  date/time field value out of range: "08 01 99"
286 LINE 1: SELECT date '08 01 99';
287                     ^
288 HINT:  Perhaps you need a different "datestyle" setting.
289 SELECT date '08 01 1999';
290 ERROR:  date/time field value out of range: "08 01 1999"
291 LINE 1: SELECT date '08 01 1999';
292                     ^
293 HINT:  Perhaps you need a different "datestyle" setting.
294 SELECT date '01 08 99';
295 ERROR:  date/time field value out of range: "01 08 99"
296 LINE 1: SELECT date '01 08 99';
297                     ^
298 HINT:  Perhaps you need a different "datestyle" setting.
299 SELECT date '01 08 1999';
300 ERROR:  date/time field value out of range: "01 08 1999"
301 LINE 1: SELECT date '01 08 1999';
302                     ^
303 HINT:  Perhaps you need a different "datestyle" setting.
304 SELECT date '99 08 01';
305     date    
306 ------------
307  1999-08-01
308 (1 row)
309
310 SELECT date '1999 08 01';
311     date    
312 ------------
313  1999-08-01
314 (1 row)
315
316 SET datestyle TO dmy;
317 SELECT date 'January 8, 1999';
318     date    
319 ------------
320  1999-01-08
321 (1 row)
322
323 SELECT date '1999-01-08';
324     date    
325 ------------
326  1999-01-08
327 (1 row)
328
329 SELECT date '1999-01-18';
330     date    
331 ------------
332  1999-01-18
333 (1 row)
334
335 SELECT date '1/8/1999';
336     date    
337 ------------
338  1999-08-01
339 (1 row)
340
341 SELECT date '1/18/1999';
342 ERROR:  date/time field value out of range: "1/18/1999"
343 LINE 1: SELECT date '1/18/1999';
344                     ^
345 HINT:  Perhaps you need a different "datestyle" setting.
346 SELECT date '18/1/1999';
347     date    
348 ------------
349  1999-01-18
350 (1 row)
351
352 SELECT date '01/02/03';
353     date    
354 ------------
355  2003-02-01
356 (1 row)
357
358 SELECT date '19990108';
359     date    
360 ------------
361  1999-01-08
362 (1 row)
363
364 SELECT date '990108';
365     date    
366 ------------
367  1999-01-08
368 (1 row)
369
370 SELECT date '1999.008';
371     date    
372 ------------
373  1999-01-08
374 (1 row)
375
376 SELECT date 'J2451187';
377     date    
378 ------------
379  1999-01-08
380 (1 row)
381
382 SELECT date 'January 8, 99 BC';
383      date      
384 ---------------
385  0099-01-08 BC
386 (1 row)
387
388 SELECT date '99-Jan-08';
389 ERROR:  date/time field value out of range: "99-Jan-08"
390 LINE 1: SELECT date '99-Jan-08';
391                     ^
392 HINT:  Perhaps you need a different "datestyle" setting.
393 SELECT date '1999-Jan-08';
394     date    
395 ------------
396  1999-01-08
397 (1 row)
398
399 SELECT date '08-Jan-99';
400     date    
401 ------------
402  1999-01-08
403 (1 row)
404
405 SELECT date '08-Jan-1999';
406     date    
407 ------------
408  1999-01-08
409 (1 row)
410
411 SELECT date 'Jan-08-99';
412     date    
413 ------------
414  1999-01-08
415 (1 row)
416
417 SELECT date 'Jan-08-1999';
418     date    
419 ------------
420  1999-01-08
421 (1 row)
422
423 SELECT date '99-08-Jan';
424 ERROR:  invalid input syntax for type date: "99-08-Jan"
425 LINE 1: SELECT date '99-08-Jan';
426                     ^
427 SELECT date '1999-08-Jan';
428 ERROR:  invalid input syntax for type date: "1999-08-Jan"
429 LINE 1: SELECT date '1999-08-Jan';
430                     ^
431 SELECT date '99 Jan 08';
432 ERROR:  date/time field value out of range: "99 Jan 08"
433 LINE 1: SELECT date '99 Jan 08';
434                     ^
435 HINT:  Perhaps you need a different "datestyle" setting.
436 SELECT date '1999 Jan 08';
437     date    
438 ------------
439  1999-01-08
440 (1 row)
441
442 SELECT date '08 Jan 99';
443     date    
444 ------------
445  1999-01-08
446 (1 row)
447
448 SELECT date '08 Jan 1999';
449     date    
450 ------------
451  1999-01-08
452 (1 row)
453
454 SELECT date 'Jan 08 99';
455     date    
456 ------------
457  1999-01-08
458 (1 row)
459
460 SELECT date 'Jan 08 1999';
461     date    
462 ------------
463  1999-01-08
464 (1 row)
465
466 SELECT date '99 08 Jan';
467 ERROR:  invalid input syntax for type date: "99 08 Jan"
468 LINE 1: SELECT date '99 08 Jan';
469                     ^
470 SELECT date '1999 08 Jan';
471     date    
472 ------------
473  1999-01-08
474 (1 row)
475
476 SELECT date '99-01-08';
477 ERROR:  date/time field value out of range: "99-01-08"
478 LINE 1: SELECT date '99-01-08';
479                     ^
480 HINT:  Perhaps you need a different "datestyle" setting.
481 SELECT date '1999-01-08';
482     date    
483 ------------
484  1999-01-08
485 (1 row)
486
487 SELECT date '08-01-99';
488     date    
489 ------------
490  1999-01-08
491 (1 row)
492
493 SELECT date '08-01-1999';
494     date    
495 ------------
496  1999-01-08
497 (1 row)
498
499 SELECT date '01-08-99';
500     date    
501 ------------
502  1999-08-01
503 (1 row)
504
505 SELECT date '01-08-1999';
506     date    
507 ------------
508  1999-08-01
509 (1 row)
510
511 SELECT date '99-08-01';
512 ERROR:  date/time field value out of range: "99-08-01"
513 LINE 1: SELECT date '99-08-01';
514                     ^
515 HINT:  Perhaps you need a different "datestyle" setting.
516 SELECT date '1999-08-01';
517     date    
518 ------------
519  1999-08-01
520 (1 row)
521
522 SELECT date '99 01 08';
523 ERROR:  date/time field value out of range: "99 01 08"
524 LINE 1: SELECT date '99 01 08';
525                     ^
526 HINT:  Perhaps you need a different "datestyle" setting.
527 SELECT date '1999 01 08';
528     date    
529 ------------
530  1999-01-08
531 (1 row)
532
533 SELECT date '08 01 99';
534     date    
535 ------------
536  1999-01-08
537 (1 row)
538
539 SELECT date '08 01 1999';
540     date    
541 ------------
542  1999-01-08
543 (1 row)
544
545 SELECT date '01 08 99';
546     date    
547 ------------
548  1999-08-01
549 (1 row)
550
551 SELECT date '01 08 1999';
552     date    
553 ------------
554  1999-08-01
555 (1 row)
556
557 SELECT date '99 08 01';
558 ERROR:  date/time field value out of range: "99 08 01"
559 LINE 1: SELECT date '99 08 01';
560                     ^
561 HINT:  Perhaps you need a different "datestyle" setting.
562 SELECT date '1999 08 01';
563     date    
564 ------------
565  1999-08-01
566 (1 row)
567
568 SET datestyle TO mdy;
569 SELECT date 'January 8, 1999';
570     date    
571 ------------
572  1999-01-08
573 (1 row)
574
575 SELECT date '1999-01-08';
576     date    
577 ------------
578  1999-01-08
579 (1 row)
580
581 SELECT date '1999-01-18';
582     date    
583 ------------
584  1999-01-18
585 (1 row)
586
587 SELECT date '1/8/1999';
588     date    
589 ------------
590  1999-01-08
591 (1 row)
592
593 SELECT date '1/18/1999';
594     date    
595 ------------
596  1999-01-18
597 (1 row)
598
599 SELECT date '18/1/1999';
600 ERROR:  date/time field value out of range: "18/1/1999"
601 LINE 1: SELECT date '18/1/1999';
602                     ^
603 HINT:  Perhaps you need a different "datestyle" setting.
604 SELECT date '01/02/03';
605     date    
606 ------------
607  2003-01-02
608 (1 row)
609
610 SELECT date '19990108';
611     date    
612 ------------
613  1999-01-08
614 (1 row)
615
616 SELECT date '990108';
617     date    
618 ------------
619  1999-01-08
620 (1 row)
621
622 SELECT date '1999.008';
623     date    
624 ------------
625  1999-01-08
626 (1 row)
627
628 SELECT date 'J2451187';
629     date    
630 ------------
631  1999-01-08
632 (1 row)
633
634 SELECT date 'January 8, 99 BC';
635      date      
636 ---------------
637  0099-01-08 BC
638 (1 row)
639
640 SELECT date '99-Jan-08';
641 ERROR:  date/time field value out of range: "99-Jan-08"
642 LINE 1: SELECT date '99-Jan-08';
643                     ^
644 HINT:  Perhaps you need a different "datestyle" setting.
645 SELECT date '1999-Jan-08';
646     date    
647 ------------
648  1999-01-08
649 (1 row)
650
651 SELECT date '08-Jan-99';
652     date    
653 ------------
654  1999-01-08
655 (1 row)
656
657 SELECT date '08-Jan-1999';
658     date    
659 ------------
660  1999-01-08
661 (1 row)
662
663 SELECT date 'Jan-08-99';
664     date    
665 ------------
666  1999-01-08
667 (1 row)
668
669 SELECT date 'Jan-08-1999';
670     date    
671 ------------
672  1999-01-08
673 (1 row)
674
675 SELECT date '99-08-Jan';
676 ERROR:  invalid input syntax for type date: "99-08-Jan"
677 LINE 1: SELECT date '99-08-Jan';
678                     ^
679 SELECT date '1999-08-Jan';
680 ERROR:  invalid input syntax for type date: "1999-08-Jan"
681 LINE 1: SELECT date '1999-08-Jan';
682                     ^
683 SELECT date '99 Jan 08';
684 ERROR:  invalid input syntax for type date: "99 Jan 08"
685 LINE 1: SELECT date '99 Jan 08';
686                     ^
687 SELECT date '1999 Jan 08';
688     date    
689 ------------
690  1999-01-08
691 (1 row)
692
693 SELECT date '08 Jan 99';
694     date    
695 ------------
696  1999-01-08
697 (1 row)
698
699 SELECT date '08 Jan 1999';
700     date    
701 ------------
702  1999-01-08
703 (1 row)
704
705 SELECT date 'Jan 08 99';
706     date    
707 ------------
708  1999-01-08
709 (1 row)
710
711 SELECT date 'Jan 08 1999';
712     date    
713 ------------
714  1999-01-08
715 (1 row)
716
717 SELECT date '99 08 Jan';
718 ERROR:  invalid input syntax for type date: "99 08 Jan"
719 LINE 1: SELECT date '99 08 Jan';
720                     ^
721 SELECT date '1999 08 Jan';
722     date    
723 ------------
724  1999-01-08
725 (1 row)
726
727 SELECT date '99-01-08';
728 ERROR:  date/time field value out of range: "99-01-08"
729 LINE 1: SELECT date '99-01-08';
730                     ^
731 HINT:  Perhaps you need a different "datestyle" setting.
732 SELECT date '1999-01-08';
733     date    
734 ------------
735  1999-01-08
736 (1 row)
737
738 SELECT date '08-01-99';
739     date    
740 ------------
741  1999-08-01
742 (1 row)
743
744 SELECT date '08-01-1999';
745     date    
746 ------------
747  1999-08-01
748 (1 row)
749
750 SELECT date '01-08-99';
751     date    
752 ------------
753  1999-01-08
754 (1 row)
755
756 SELECT date '01-08-1999';
757     date    
758 ------------
759  1999-01-08
760 (1 row)
761
762 SELECT date '99-08-01';
763 ERROR:  date/time field value out of range: "99-08-01"
764 LINE 1: SELECT date '99-08-01';
765                     ^
766 HINT:  Perhaps you need a different "datestyle" setting.
767 SELECT date '1999-08-01';
768     date    
769 ------------
770  1999-08-01
771 (1 row)
772
773 SELECT date '99 01 08';
774 ERROR:  date/time field value out of range: "99 01 08"
775 LINE 1: SELECT date '99 01 08';
776                     ^
777 HINT:  Perhaps you need a different "datestyle" setting.
778 SELECT date '1999 01 08';
779     date    
780 ------------
781  1999-01-08
782 (1 row)
783
784 SELECT date '08 01 99';
785     date    
786 ------------
787  1999-08-01
788 (1 row)
789
790 SELECT date '08 01 1999';
791     date    
792 ------------
793  1999-08-01
794 (1 row)
795
796 SELECT date '01 08 99';
797     date    
798 ------------
799  1999-01-08
800 (1 row)
801
802 SELECT date '01 08 1999';
803     date    
804 ------------
805  1999-01-08
806 (1 row)
807
808 SELECT date '99 08 01';
809 ERROR:  date/time field value out of range: "99 08 01"
810 LINE 1: SELECT date '99 08 01';
811                     ^
812 HINT:  Perhaps you need a different "datestyle" setting.
813 SELECT date '1999 08 01';
814     date    
815 ------------
816  1999-08-01
817 (1 row)
818
819 RESET datestyle;
820 --
821 -- Simple math
822 -- Leave most of it for the horology tests
823 --
824 SELECT f1 - date '2000-01-01' AS "Days From 2K" FROM DATE_TBL;
825  Days From 2K 
826 --------------
827        -15607
828        -15542
829         -1403
830         -1402
831         -1401
832         -1400
833         -1037
834         -1036
835         -1035
836            91
837            92
838            93
839         13977
840         14343
841         14710
842 (15 rows)
843
844 SELECT f1 - date 'epoch' AS "Days From Epoch" FROM DATE_TBL;
845  Days From Epoch 
846 -----------------
847            -4650
848            -4585
849             9554
850             9555
851             9556
852             9557
853             9920
854             9921
855             9922
856            11048
857            11049
858            11050
859            24934
860            25300
861            25667
862 (15 rows)
863
864 SELECT date 'yesterday' - date 'today' AS "One day";
865  One day 
866 ---------
867       -1
868 (1 row)
869
870 SELECT date 'today' - date 'tomorrow' AS "One day";
871  One day 
872 ---------
873       -1
874 (1 row)
875
876 SELECT date 'yesterday' - date 'tomorrow' AS "Two days";
877  Two days 
878 ----------
879        -2
880 (1 row)
881
882 SELECT date 'tomorrow' - date 'today' AS "One day";
883  One day 
884 ---------
885        1
886 (1 row)
887
888 SELECT date 'today' - date 'yesterday' AS "One day";
889  One day 
890 ---------
891        1
892 (1 row)
893
894 SELECT date 'tomorrow' - date 'yesterday' AS "Two days";
895  Two days 
896 ----------
897         2
898 (1 row)
899
900 --
901 -- test extract!
902 --
903 -- century
904 --
905 SELECT EXTRACT(CENTURY FROM DATE '0101-12-31 BC'); -- -2
906  date_part 
907 -----------
908         -2
909 (1 row)
910
911 SELECT EXTRACT(CENTURY FROM DATE '0100-12-31 BC'); -- -1
912  date_part 
913 -----------
914         -1
915 (1 row)
916
917 SELECT EXTRACT(CENTURY FROM DATE '0001-12-31 BC'); -- -1
918  date_part 
919 -----------
920         -1
921 (1 row)
922
923 SELECT EXTRACT(CENTURY FROM DATE '0001-01-01');    --  1
924  date_part 
925 -----------
926          1
927 (1 row)
928
929 SELECT EXTRACT(CENTURY FROM DATE '0001-01-01 AD'); --  1
930  date_part 
931 -----------
932          1
933 (1 row)
934
935 SELECT EXTRACT(CENTURY FROM DATE '1900-12-31');    -- 19
936  date_part 
937 -----------
938         19
939 (1 row)
940
941 SELECT EXTRACT(CENTURY FROM DATE '1901-01-01');    -- 20
942  date_part 
943 -----------
944         20
945 (1 row)
946
947 SELECT EXTRACT(CENTURY FROM DATE '2000-12-31');    -- 20
948  date_part 
949 -----------
950         20
951 (1 row)
952
953 SELECT EXTRACT(CENTURY FROM DATE '2001-01-01');    -- 21
954  date_part 
955 -----------
956         21
957 (1 row)
958
959 SELECT EXTRACT(CENTURY FROM CURRENT_DATE)>=21 AS True;     -- true
960  true 
961 ------
962  t
963 (1 row)
964
965 --
966 -- millennium
967 --
968 SELECT EXTRACT(MILLENNIUM FROM DATE '0001-12-31 BC'); -- -1
969  date_part 
970 -----------
971         -1
972 (1 row)
973
974 SELECT EXTRACT(MILLENNIUM FROM DATE '0001-01-01 AD'); --  1
975  date_part 
976 -----------
977          1
978 (1 row)
979
980 SELECT EXTRACT(MILLENNIUM FROM DATE '1000-12-31');    --  1
981  date_part 
982 -----------
983          1
984 (1 row)
985
986 SELECT EXTRACT(MILLENNIUM FROM DATE '1001-01-01');    --  2
987  date_part 
988 -----------
989          2
990 (1 row)
991
992 SELECT EXTRACT(MILLENNIUM FROM DATE '2000-12-31');    --  2
993  date_part 
994 -----------
995          2
996 (1 row)
997
998 SELECT EXTRACT(MILLENNIUM FROM DATE '2001-01-01');    --  3
999  date_part 
1000 -----------
1001          3
1002 (1 row)
1003
1004 -- next test to be fixed on the turn of the next millennium;-)
1005 SELECT EXTRACT(MILLENNIUM FROM CURRENT_DATE);         --  3
1006  date_part 
1007 -----------
1008          3
1009 (1 row)
1010
1011 --
1012 -- decade
1013 --
1014 SELECT EXTRACT(DECADE FROM DATE '1994-12-25');    -- 199
1015  date_part 
1016 -----------
1017        199
1018 (1 row)
1019
1020 SELECT EXTRACT(DECADE FROM DATE '0010-01-01');    --   1
1021  date_part 
1022 -----------
1023          1
1024 (1 row)
1025
1026 SELECT EXTRACT(DECADE FROM DATE '0009-12-31');    --   0
1027  date_part 
1028 -----------
1029          0
1030 (1 row)
1031
1032 SELECT EXTRACT(DECADE FROM DATE '0001-01-01 BC'); --   0
1033  date_part 
1034 -----------
1035          0
1036 (1 row)
1037
1038 SELECT EXTRACT(DECADE FROM DATE '0002-12-31 BC'); --  -1
1039  date_part 
1040 -----------
1041         -1
1042 (1 row)
1043
1044 SELECT EXTRACT(DECADE FROM DATE '0011-01-01 BC'); --  -1
1045  date_part 
1046 -----------
1047         -1
1048 (1 row)
1049
1050 SELECT EXTRACT(DECADE FROM DATE '0012-12-31 BC'); --  -2
1051  date_part 
1052 -----------
1053         -2
1054 (1 row)
1055
1056 --
1057 -- some other types:
1058 --
1059 -- on a timestamp.
1060 SELECT EXTRACT(CENTURY FROM NOW())>=21 AS True;       -- true
1061  true 
1062 ------
1063  t
1064 (1 row)
1065
1066 SELECT EXTRACT(CENTURY FROM TIMESTAMP '1970-03-20 04:30:00.00000'); -- 20
1067  date_part 
1068 -----------
1069         20
1070 (1 row)
1071
1072 -- on an interval
1073 SELECT EXTRACT(CENTURY FROM INTERVAL '100 y');  -- 1
1074  date_part 
1075 -----------
1076          1
1077 (1 row)
1078
1079 SELECT EXTRACT(CENTURY FROM INTERVAL '99 y');   -- 0
1080  date_part 
1081 -----------
1082          0
1083 (1 row)
1084
1085 SELECT EXTRACT(CENTURY FROM INTERVAL '-99 y');  -- 0
1086  date_part 
1087 -----------
1088          0
1089 (1 row)
1090
1091 SELECT EXTRACT(CENTURY FROM INTERVAL '-100 y'); -- -1
1092  date_part 
1093 -----------
1094         -1
1095 (1 row)
1096
1097 --
1098 -- test trunc function!
1099 --
1100 SELECT DATE_TRUNC('MILLENNIUM', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1001
1101         date_trunc        
1102 --------------------------
1103  Thu Jan 01 00:00:00 1001
1104 (1 row)
1105
1106 SELECT DATE_TRUNC('MILLENNIUM', DATE '1970-03-20'); -- 1001-01-01
1107           date_trunc          
1108 ------------------------------
1109  Thu Jan 01 00:00:00 1001 PST
1110 (1 row)
1111
1112 SELECT DATE_TRUNC('CENTURY', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1901
1113         date_trunc        
1114 --------------------------
1115  Tue Jan 01 00:00:00 1901
1116 (1 row)
1117
1118 SELECT DATE_TRUNC('CENTURY', DATE '1970-03-20'); -- 1901
1119           date_trunc          
1120 ------------------------------
1121  Tue Jan 01 00:00:00 1901 PST
1122 (1 row)
1123
1124 SELECT DATE_TRUNC('CENTURY', DATE '2004-08-10'); -- 2001-01-01
1125           date_trunc          
1126 ------------------------------
1127  Mon Jan 01 00:00:00 2001 PST
1128 (1 row)
1129
1130 SELECT DATE_TRUNC('CENTURY', DATE '0002-02-04'); -- 0001-01-01
1131           date_trunc          
1132 ------------------------------
1133  Mon Jan 01 00:00:00 0001 PST
1134 (1 row)
1135
1136 SELECT DATE_TRUNC('CENTURY', DATE '0055-08-10 BC'); -- 0100-01-01 BC
1137            date_trunc            
1138 ---------------------------------
1139  Tue Jan 01 00:00:00 0100 PST BC
1140 (1 row)
1141
1142 SELECT DATE_TRUNC('DECADE', DATE '1993-12-25'); -- 1990-01-01
1143           date_trunc          
1144 ------------------------------
1145  Mon Jan 01 00:00:00 1990 PST
1146 (1 row)
1147
1148 SELECT DATE_TRUNC('DECADE', DATE '0004-12-25'); -- 0001-01-01 BC
1149            date_trunc            
1150 ---------------------------------
1151  Sat Jan 01 00:00:00 0001 PST BC
1152 (1 row)
1153
1154 SELECT DATE_TRUNC('DECADE', DATE '0002-12-31 BC'); -- 0011-01-01 BC
1155            date_trunc            
1156 ---------------------------------
1157  Mon Jan 01 00:00:00 0011 PST BC
1158 (1 row)
1159
1160 --
1161 -- test infinity
1162 --
1163 select 'infinity'::date, '-infinity'::date;
1164    date   |   date    
1165 ----------+-----------
1166  infinity | -infinity
1167 (1 row)
1168
1169 select 'infinity'::date > 'today'::date as t;
1170  t 
1171 ---
1172  t
1173 (1 row)
1174
1175 select '-infinity'::date < 'today'::date as t;
1176  t 
1177 ---
1178  t
1179 (1 row)
1180
1181 select isfinite('infinity'::date), isfinite('-infinity'::date), isfinite('today'::date);
1182  isfinite | isfinite | isfinite 
1183 ----------+----------+----------
1184  f        | f        | t
1185 (1 row)
1186