1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105 |
- --
- -- DATE
- --
- CREATE TABLE DATE_TBL (f1 date);
- INSERT INTO DATE_TBL VALUES ('1957-04-09');
- INSERT INTO DATE_TBL VALUES ('1957-06-13');
- INSERT INTO DATE_TBL VALUES ('1996-02-28');
- INSERT INTO DATE_TBL VALUES ('1996-02-29');
- INSERT INTO DATE_TBL VALUES ('1996-03-01');
- INSERT INTO DATE_TBL VALUES ('1996-03-02');
- INSERT INTO DATE_TBL VALUES ('1997-02-28');
- INSERT INTO DATE_TBL VALUES ('1997-02-29');
- ERROR: date/time field value out of range: "1997-02-29"
- LINE 1: INSERT INTO DATE_TBL VALUES ('1997-02-29');
- ^
- INSERT INTO DATE_TBL VALUES ('1997-03-01');
- INSERT INTO DATE_TBL VALUES ('1997-03-02');
- INSERT INTO DATE_TBL VALUES ('2000-04-01');
- INSERT INTO DATE_TBL VALUES ('2000-04-02');
- INSERT INTO DATE_TBL VALUES ('2000-04-03');
- INSERT INTO DATE_TBL VALUES ('2038-04-08');
- INSERT INTO DATE_TBL VALUES ('2039-04-09');
- INSERT INTO DATE_TBL VALUES ('2040-04-10');
- INSERT INTO DATE_TBL VALUES ('2040-04-10 BC');
- --
- -- Check all the documented input formats
- --
- SET datestyle TO iso; -- display results in ISO
- SET datestyle TO ymd;
- SELECT date 'January 8, 1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999-01-08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999-01-18';
- date
- ------------
- 1999-01-18
- (1 row)
- SELECT date '18/1/1999';
- ERROR: date/time field value out of range: "18/1/1999"
- LINE 1: SELECT date '18/1/1999';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '19990108';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '990108';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999.008';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date 'J2451187';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999-Jan-08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '08-Jan-1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date 'Jan-08-1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '99-08-Jan';
- ERROR: invalid input syntax for type date: "99-08-Jan"
- LINE 1: SELECT date '99-08-Jan';
- ^
- SELECT date '1999-08-Jan';
- ERROR: invalid input syntax for type date: "1999-08-Jan"
- LINE 1: SELECT date '1999-08-Jan';
- ^
- SELECT date '1999 Jan 08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '08 Jan 1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date 'Jan 08 1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999 08 Jan';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999-01-08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999-08-01';
- date
- ------------
- 1999-08-01
- (1 row)
- SELECT date '1999 01 08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999 08 01';
- date
- ------------
- 1999-08-01
- (1 row)
- SET datestyle TO dmy;
- SELECT date 'January 8, 1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999-01-08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999-01-18';
- date
- ------------
- 1999-01-18
- (1 row)
- SELECT date '19990108';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '990108';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999.008';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date 'J2451187';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date 'January 8, 99 BC';
- date
- ---------------
- 0099-01-08 BC
- (1 row)
- SELECT date '99-Jan-08';
- ERROR: date/time field value out of range: "99-Jan-08"
- LINE 1: SELECT date '99-Jan-08';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '1999-Jan-08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '08-Jan-99';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '08-Jan-1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date 'Jan-08-99';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date 'Jan-08-1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '99-08-Jan';
- ERROR: invalid input syntax for type date: "99-08-Jan"
- LINE 1: SELECT date '99-08-Jan';
- ^
- SELECT date '1999-08-Jan';
- ERROR: invalid input syntax for type date: "1999-08-Jan"
- LINE 1: SELECT date '1999-08-Jan';
- ^
- SELECT date '1999 Jan 08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '08 Jan 99';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '08 Jan 1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date 'Jan 08 99';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date 'Jan 08 1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '99 08 Jan';
- ERROR: invalid input syntax for type date: "99 08 Jan"
- LINE 1: SELECT date '99 08 Jan';
- ^
- SELECT date '1999 08 Jan';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '99-01-08';
- ERROR: date/time field value out of range: "99-01-08"
- LINE 1: SELECT date '99-01-08';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '1999-01-08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '99-08-01';
- ERROR: date/time field value out of range: "99-08-01"
- LINE 1: SELECT date '99-08-01';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '1999-08-01';
- date
- ------------
- 1999-08-01
- (1 row)
- SELECT date '99 01 08';
- ERROR: date/time field value out of range: "99 01 08"
- LINE 1: SELECT date '99 01 08';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '1999 01 08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '99 08 01';
- ERROR: date/time field value out of range: "99 08 01"
- LINE 1: SELECT date '99 08 01';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '1999 08 01';
- date
- ------------
- 1999-08-01
- (1 row)
- SET datestyle TO mdy;
- SELECT date 'January 8, 1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999-01-08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999-01-18';
- date
- ------------
- 1999-01-18
- (1 row)
- SELECT date '1/8/1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1/18/1999';
- date
- ------------
- 1999-01-18
- (1 row)
- SELECT date '18/1/1999';
- ERROR: date/time field value out of range: "18/1/1999"
- LINE 1: SELECT date '18/1/1999';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '01/02/03';
- date
- ------------
- 2003-01-02
- (1 row)
- SELECT date '19990108';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '990108';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999.008';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date 'J2451187';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date 'January 8, 99 BC';
- date
- ---------------
- 0099-01-08 BC
- (1 row)
- SELECT date '99-Jan-08';
- ERROR: date/time field value out of range: "99-Jan-08"
- LINE 1: SELECT date '99-Jan-08';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '1999-Jan-08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '08-Jan-99';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '08-Jan-1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date 'Jan-08-99';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date 'Jan-08-1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '99-08-Jan';
- ERROR: invalid input syntax for type date: "99-08-Jan"
- LINE 1: SELECT date '99-08-Jan';
- ^
- SELECT date '1999-08-Jan';
- ERROR: invalid input syntax for type date: "1999-08-Jan"
- LINE 1: SELECT date '1999-08-Jan';
- ^
- SELECT date '99 Jan 08';
- ERROR: invalid input syntax for type date: "99 Jan 08"
- LINE 1: SELECT date '99 Jan 08';
- ^
- SELECT date '1999 Jan 08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '08 Jan 99';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '08 Jan 1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date 'Jan 08 99';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date 'Jan 08 1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '99 08 Jan';
- ERROR: invalid input syntax for type date: "99 08 Jan"
- LINE 1: SELECT date '99 08 Jan';
- ^
- SELECT date '1999 08 Jan';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '99-01-08';
- ERROR: date/time field value out of range: "99-01-08"
- LINE 1: SELECT date '99-01-08';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '1999-01-08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '08-01-99';
- date
- ------------
- 1999-08-01
- (1 row)
- SELECT date '08-01-1999';
- date
- ------------
- 1999-08-01
- (1 row)
- SELECT date '01-08-99';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '01-08-1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '99-08-01';
- ERROR: date/time field value out of range: "99-08-01"
- LINE 1: SELECT date '99-08-01';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '1999-08-01';
- date
- ------------
- 1999-08-01
- (1 row)
- SELECT date '99 01 08';
- ERROR: date/time field value out of range: "99 01 08"
- LINE 1: SELECT date '99 01 08';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '1999 01 08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '08 01 99';
- date
- ------------
- 1999-08-01
- (1 row)
- SELECT date '08 01 1999';
- date
- ------------
- 1999-08-01
- (1 row)
- SELECT date '01 08 99';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '01 08 1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '99 08 01';
- ERROR: date/time field value out of range: "99 08 01"
- LINE 1: SELECT date '99 08 01';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '1999 08 01';
- date
- ------------
- 1999-08-01
- (1 row)
- -- Check upper and lower limits of date range
- SELECT date '4714-11-24 BC';
- date
- ---------------
- 4714-11-24 BC
- (1 row)
- SELECT date '4714-11-23 BC'; -- out of range
- ERROR: date out of range: "4714-11-23 BC"
- LINE 1: SELECT date '4714-11-23 BC';
- ^
- SELECT date '5874897-12-31';
- date
- ---------------
- 5874897-12-31
- (1 row)
- SELECT date '5874898-01-01'; -- out of range
- ERROR: date out of range: "5874898-01-01"
- LINE 1: SELECT date '5874898-01-01';
- ^
- RESET datestyle;
- --
- -- Simple math
- -- Leave most of it for the horology tests
- --
- SELECT f1 - date '2000-01-01' AS "Days From 2K" FROM DATE_TBL;
- Days From 2K
- --------------
- -15607
- -15542
- -1403
- -1402
- -1401
- -1400
- -1037
- -1036
- -1035
- 91
- 92
- 93
- 13977
- 14343
- 14710
- -1475115
- (16 rows)
- SELECT f1 - date 'epoch' AS "Days From Epoch" FROM DATE_TBL;
- Days From Epoch
- -----------------
- -4650
- -4585
- 9554
- 9555
- 9556
- 9557
- 9920
- 9921
- 9922
- 11048
- 11049
- 11050
- 24934
- 25300
- 25667
- -1464158
- (16 rows)
- SELECT date 'yesterday' - date 'today' AS "One day";
- One day
- ---------
- -1
- (1 row)
- SELECT date 'today' - date 'tomorrow' AS "One day";
- One day
- ---------
- -1
- (1 row)
- SELECT date 'yesterday' - date 'tomorrow' AS "Two days";
- Two days
- ----------
- -2
- (1 row)
- SELECT date 'tomorrow' - date 'today' AS "One day";
- One day
- ---------
- 1
- (1 row)
- SELECT date 'today' - date 'yesterday' AS "One day";
- One day
- ---------
- 1
- (1 row)
- SELECT date 'tomorrow' - date 'yesterday' AS "Two days";
- Two days
- ----------
- 2
- (1 row)
- --
- -- century
- --
- SELECT EXTRACT(CENTURY FROM DATE '0101-12-31 BC'); -- -2
- extract
- ---------
- -2
- (1 row)
- SELECT EXTRACT(CENTURY FROM DATE '0100-12-31 BC'); -- -1
- extract
- ---------
- -1
- (1 row)
- SELECT EXTRACT(CENTURY FROM DATE '0001-12-31 BC'); -- -1
- extract
- ---------
- -1
- (1 row)
- SELECT EXTRACT(CENTURY FROM DATE '0001-01-01'); -- 1
- extract
- ---------
- 1
- (1 row)
- SELECT EXTRACT(CENTURY FROM DATE '0001-01-01 AD'); -- 1
- extract
- ---------
- 1
- (1 row)
- SELECT EXTRACT(CENTURY FROM DATE '1900-12-31'); -- 19
- extract
- ---------
- 19
- (1 row)
- SELECT EXTRACT(CENTURY FROM DATE '1901-01-01'); -- 20
- extract
- ---------
- 20
- (1 row)
- SELECT EXTRACT(CENTURY FROM DATE '2000-12-31'); -- 20
- extract
- ---------
- 20
- (1 row)
- SELECT EXTRACT(CENTURY FROM DATE '2001-01-01'); -- 21
- extract
- ---------
- 21
- (1 row)
- SELECT EXTRACT(CENTURY FROM CURRENT_DATE)>=21 AS True; -- true
- true
- ------
- t
- (1 row)
- --
- -- millennium
- --
- SELECT EXTRACT(MILLENNIUM FROM DATE '0001-12-31 BC'); -- -1
- extract
- ---------
- -1
- (1 row)
- SELECT EXTRACT(MILLENNIUM FROM DATE '0001-01-01 AD'); -- 1
- extract
- ---------
- 1
- (1 row)
- SELECT EXTRACT(MILLENNIUM FROM DATE '1000-12-31'); -- 1
- extract
- ---------
- 1
- (1 row)
- SELECT EXTRACT(MILLENNIUM FROM DATE '1001-01-01'); -- 2
- extract
- ---------
- 2
- (1 row)
- SELECT EXTRACT(MILLENNIUM FROM DATE '2000-12-31'); -- 2
- extract
- ---------
- 2
- (1 row)
- SELECT EXTRACT(MILLENNIUM FROM DATE '2001-01-01'); -- 3
- extract
- ---------
- 3
- (1 row)
- -- next test to be fixed on the turn of the next millennium;-)
- SELECT EXTRACT(MILLENNIUM FROM CURRENT_DATE); -- 3
- extract
- ---------
- 3
- (1 row)
- --
- -- decade
- --
- SELECT EXTRACT(DECADE FROM DATE '1994-12-25'); -- 199
- extract
- ---------
- 199
- (1 row)
- SELECT EXTRACT(DECADE FROM DATE '0010-01-01'); -- 1
- extract
- ---------
- 1
- (1 row)
- SELECT EXTRACT(DECADE FROM DATE '0002-12-31 BC'); -- -1
- extract
- ---------
- -1
- (1 row)
- SELECT EXTRACT(DECADE FROM DATE '0011-01-01 BC'); -- -1
- extract
- ---------
- -1
- (1 row)
- SELECT EXTRACT(DECADE FROM DATE '0012-12-31 BC'); -- -2
- extract
- ---------
- -2
- (1 row)
- --
- -- all possible fields
- --
- SELECT EXTRACT(MICROSECONDS FROM DATE '2020-08-11');
- ERROR: date units "microseconds" not supported
- SELECT EXTRACT(MILLISECONDS FROM DATE '2020-08-11');
- ERROR: date units "milliseconds" not supported
- SELECT EXTRACT(SECOND FROM DATE '2020-08-11');
- ERROR: date units "second" not supported
- SELECT EXTRACT(MINUTE FROM DATE '2020-08-11');
- ERROR: date units "minute" not supported
- SELECT EXTRACT(HOUR FROM DATE '2020-08-11');
- ERROR: date units "hour" not supported
- SELECT EXTRACT(DAY FROM DATE '2020-08-11');
- extract
- ---------
- 11
- (1 row)
- SELECT EXTRACT(MONTH FROM DATE '2020-08-11');
- extract
- ---------
- 8
- (1 row)
- SELECT EXTRACT(YEAR FROM DATE '2020-08-11');
- extract
- ---------
- 2020
- (1 row)
- SELECT EXTRACT(YEAR FROM DATE '2020-08-11 BC');
- extract
- ---------
- -2020
- (1 row)
- SELECT EXTRACT(DECADE FROM DATE '2020-08-11');
- extract
- ---------
- 202
- (1 row)
- SELECT EXTRACT(CENTURY FROM DATE '2020-08-11');
- extract
- ---------
- 21
- (1 row)
- SELECT EXTRACT(MILLENNIUM FROM DATE '2020-08-11');
- extract
- ---------
- 3
- (1 row)
- SELECT EXTRACT(ISOYEAR FROM DATE '2020-08-11');
- extract
- ---------
- 2020
- (1 row)
- SELECT EXTRACT(ISOYEAR FROM DATE '2020-08-11 BC');
- extract
- ---------
- -2020
- (1 row)
- SELECT EXTRACT(QUARTER FROM DATE '2020-08-11');
- extract
- ---------
- 3
- (1 row)
- SELECT EXTRACT(WEEK FROM DATE '2020-08-11');
- extract
- ---------
- 33
- (1 row)
- SELECT EXTRACT(DOW FROM DATE '2020-08-11');
- extract
- ---------
- 2
- (1 row)
- SELECT EXTRACT(ISODOW FROM DATE '2020-08-11');
- extract
- ---------
- 2
- (1 row)
- SELECT EXTRACT(ISODOW FROM DATE '2020-08-16');
- extract
- ---------
- 7
- (1 row)
- SELECT EXTRACT(DOY FROM DATE '2020-08-11');
- extract
- ---------
- 224
- (1 row)
- SELECT EXTRACT(TIMEZONE FROM DATE '2020-08-11');
- ERROR: date units "timezone" not supported
- SELECT EXTRACT(TIMEZONE_M FROM DATE '2020-08-11');
- ERROR: date units "timezone_m" not supported
- SELECT EXTRACT(TIMEZONE_H FROM DATE '2020-08-11');
- ERROR: date units "timezone_h" not supported
- SELECT EXTRACT(EPOCH FROM DATE '2020-08-11');
- extract
- ------------
- 1597104000
- (1 row)
- SELECT EXTRACT(JULIAN FROM DATE '2020-08-11');
- extract
- ---------
- 2459073
- (1 row)
- --
- -- test infinity
- --
- select 'infinity'::date, '-infinity'::date;
- date | date
- ----------+-----------
- infinity | -infinity
- (1 row)
- select 'infinity'::date > 'today'::date as t;
- t
- ---
- t
- (1 row)
- select '-infinity'::date < 'today'::date as t;
- t
- ---
- t
- (1 row)
- --
- -- oscillating fields from non-finite date:
- --
- SELECT EXTRACT(DAY FROM DATE 'infinity'); -- NULL
- extract
- ---------
-
- (1 row)
- SELECT EXTRACT(DAY FROM DATE '-infinity'); -- NULL
- extract
- ---------
-
- (1 row)
- -- all supported fields
- SELECT EXTRACT(DAY FROM DATE 'infinity'); -- NULL
- extract
- ---------
-
- (1 row)
- SELECT EXTRACT(MONTH FROM DATE 'infinity'); -- NULL
- extract
- ---------
-
- (1 row)
- SELECT EXTRACT(QUARTER FROM DATE 'infinity'); -- NULL
- extract
- ---------
-
- (1 row)
- SELECT EXTRACT(WEEK FROM DATE 'infinity'); -- NULL
- extract
- ---------
-
- (1 row)
- SELECT EXTRACT(DOW FROM DATE 'infinity'); -- NULL
- extract
- ---------
-
- (1 row)
- SELECT EXTRACT(ISODOW FROM DATE 'infinity'); -- NULL
- extract
- ---------
-
- (1 row)
- SELECT EXTRACT(DOY FROM DATE 'infinity'); -- NULL
- extract
- ---------
-
- (1 row)
- --
- -- monotonic fields from non-finite date:
- --
- SELECT EXTRACT(EPOCH FROM DATE 'infinity'); -- Infinity
- extract
- ----------
- Infinity
- (1 row)
- SELECT EXTRACT(EPOCH FROM DATE '-infinity'); -- -Infinity
- extract
- -----------
- -Infinity
- (1 row)
- -- all supported fields
- SELECT EXTRACT(YEAR FROM DATE 'infinity'); -- Infinity
- extract
- ----------
- Infinity
- (1 row)
- SELECT EXTRACT(DECADE FROM DATE 'infinity'); -- Infinity
- extract
- ----------
- Infinity
- (1 row)
- SELECT EXTRACT(CENTURY FROM DATE 'infinity'); -- Infinity
- extract
- ----------
- Infinity
- (1 row)
- SELECT EXTRACT(MILLENNIUM FROM DATE 'infinity'); -- Infinity
- extract
- ----------
- Infinity
- (1 row)
- SELECT EXTRACT(JULIAN FROM DATE 'infinity'); -- Infinity
- extract
- ----------
- Infinity
- (1 row)
- SELECT EXTRACT(ISOYEAR FROM DATE 'infinity'); -- Infinity
- extract
- ----------
- Infinity
- (1 row)
- SELECT EXTRACT(EPOCH FROM DATE 'infinity'); -- Infinity
- extract
- ----------
- Infinity
- (1 row)
- --
- -- wrong fields from non-finite date:
- --
- SELECT EXTRACT(MICROSEC FROM DATE 'infinity'); -- error
- ERROR: date units "microsec" not recognized
- select make_time(8, 20, 0.0);
- make_time
- -----------
- 08:20:00
- (1 row)
- -- should fail
- select make_date(0, 7, 15);
- ERROR: date field value out of range: 0-07-15
- select make_date(2013, 2, 30);
- ERROR: date field value out of range: 2013-02-30
- select make_date(2013, 13, 1);
- ERROR: date field value out of range: 2013-13-01
- select make_date(2013, 11, -1);
- ERROR: date field value out of range: 2013-11--1
- select make_time(10, 55, 100.1);
- ERROR: time field value out of range: 10:55:100.1
- select make_time(24, 0, 2.1);
- ERROR: time field value out of range: 24:00:2.1
|