@@ -930,3 +930,87 @@ select make_interval(secs := 7e12);
930930 @ 1944444444 hours 26 mins 40 secs
931931(1 row)
932932
933+ --
934+ -- test EXTRACT
935+ --
936+ SELECT f1,
937+ EXTRACT(MICROSECOND FROM f1) AS MICROSECOND,
938+ EXTRACT(MILLISECOND FROM f1) AS MILLISECOND,
939+ EXTRACT(SECOND FROM f1) AS SECOND,
940+ EXTRACT(MINUTE FROM f1) AS MINUTE,
941+ EXTRACT(HOUR FROM f1) AS HOUR,
942+ EXTRACT(DAY FROM f1) AS DAY,
943+ EXTRACT(MONTH FROM f1) AS MONTH,
944+ EXTRACT(QUARTER FROM f1) AS QUARTER,
945+ EXTRACT(YEAR FROM f1) AS YEAR,
946+ EXTRACT(DECADE FROM f1) AS DECADE,
947+ EXTRACT(CENTURY FROM f1) AS CENTURY,
948+ EXTRACT(MILLENNIUM FROM f1) AS MILLENNIUM,
949+ EXTRACT(EPOCH FROM f1) AS EPOCH
950+ FROM INTERVAL_TBL;
951+ f1 | microsecond | millisecond | second | minute | hour | day | month | quarter | year | decade | century | millennium | epoch
952+ -------------------------------+-------------+-------------+--------+--------+------+-----+-------+---------+------+--------+---------+------------+------------
953+ @ 1 min | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 60
954+ @ 5 hours | 0 | 0 | 0 | 0 | 5 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 18000
955+ @ 10 days | 0 | 0 | 0 | 0 | 0 | 10 | 0 | 1 | 0 | 0 | 0 | 0 | 864000
956+ @ 34 years | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 34 | 3 | 0 | 0 | 1072958400
957+ @ 3 mons | 0 | 0 | 0 | 0 | 0 | 0 | 3 | 2 | 0 | 0 | 0 | 0 | 7776000
958+ @ 14 secs ago | -14000000 | -14000 | -14 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | -14
959+ @ 1 day 2 hours 3 mins 4 secs | 4000000 | 4000 | 4 | 3 | 2 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 93784
960+ @ 6 years | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 6 | 0 | 0 | 0 | 189345600
961+ @ 5 mons | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 2 | 0 | 0 | 0 | 0 | 12960000
962+ @ 5 mons 12 hours | 0 | 0 | 0 | 0 | 12 | 0 | 5 | 2 | 0 | 0 | 0 | 0 | 13003200
963+ (10 rows)
964+
965+ SELECT EXTRACT(FORTNIGHT FROM INTERVAL '2 days'); -- error
966+ ERROR: interval units "fortnight" not recognized
967+ SELECT EXTRACT(TIMEZONE FROM INTERVAL '2 days'); -- error
968+ ERROR: interval units "timezone" not supported
969+ SELECT EXTRACT(DECADE FROM INTERVAL '100 y');
970+ date_part
971+ -----------
972+ 10
973+ (1 row)
974+
975+ SELECT EXTRACT(DECADE FROM INTERVAL '99 y');
976+ date_part
977+ -----------
978+ 9
979+ (1 row)
980+
981+ SELECT EXTRACT(DECADE FROM INTERVAL '-99 y');
982+ date_part
983+ -----------
984+ -9
985+ (1 row)
986+
987+ SELECT EXTRACT(DECADE FROM INTERVAL '-100 y');
988+ date_part
989+ -----------
990+ -10
991+ (1 row)
992+
993+ SELECT EXTRACT(CENTURY FROM INTERVAL '100 y');
994+ date_part
995+ -----------
996+ 1
997+ (1 row)
998+
999+ SELECT EXTRACT(CENTURY FROM INTERVAL '99 y');
1000+ date_part
1001+ -----------
1002+ 0
1003+ (1 row)
1004+
1005+ SELECT EXTRACT(CENTURY FROM INTERVAL '-99 y');
1006+ date_part
1007+ -----------
1008+ 0
1009+ (1 row)
1010+
1011+ SELECT EXTRACT(CENTURY FROM INTERVAL '-100 y');
1012+ date_part
1013+ -----------
1014+ -1
1015+ (1 row)
1016+
0 commit comments