123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497 |
- --
- -- 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');
- SELECT f1 FROM DATE_TBL;
- f1
- ---------------
- 04-09-1957
- 06-13-1957
- 02-28-1996
- 02-29-1996
- 03-01-1996
- 03-02-1996
- 02-28-1997
- 03-01-1997
- 03-02-1997
- 04-01-2000
- 04-02-2000
- 04-03-2000
- 04-08-2038
- 04-09-2039
- 04-10-2040
- 04-10-2040 BC
- (16 rows)
- SELECT f1 FROM DATE_TBL WHERE f1 < '2000-01-01';
- f1
- ---------------
- 04-09-1957
- 06-13-1957
- 02-28-1996
- 02-29-1996
- 03-01-1996
- 03-02-1996
- 02-28-1997
- 03-01-1997
- 03-02-1997
- 04-10-2040 BC
- (10 rows)
- SELECT f1 FROM DATE_TBL
- WHERE f1 BETWEEN '2000-01-01' AND '2001-01-01';
- f1
- ------------
- 04-01-2000
- 04-02-2000
- 04-03-2000
- (3 rows)
- --
- -- 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 '1/8/1999';
- ERROR: date/time field value out of range: "1/8/1999"
- LINE 1: SELECT date '1/8/1999';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '1/18/1999';
- ERROR: date/time field value out of range: "1/18/1999"
- LINE 1: SELECT date '1/18/1999';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- 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
- ------------
- 2001-02-03
- (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';
- ERROR: date/time field value out of range: "January 8, 99 BC"
- LINE 1: SELECT date 'January 8, 99 BC';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '99-Jan-08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999-Jan-08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '08-Jan-99';
- ERROR: date/time field value out of range: "08-Jan-99"
- LINE 1: SELECT date '08-Jan-99';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '08-Jan-1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date 'Jan-08-99';
- ERROR: date/time field value out of range: "Jan-08-99"
- LINE 1: SELECT date 'Jan-08-99';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- 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';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999 Jan 08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '08 Jan 99';
- ERROR: date/time field value out of range: "08 Jan 99"
- LINE 1: SELECT date '08 Jan 99';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '08 Jan 1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date 'Jan 08 99';
- ERROR: date/time field value out of range: "Jan 08 99"
- LINE 1: SELECT date 'Jan 08 99';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date 'Jan 08 1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '99 08 Jan';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999 08 Jan';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '99-01-08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999-01-08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '08-01-99';
- ERROR: date/time field value out of range: "08-01-99"
- LINE 1: SELECT date '08-01-99';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '08-01-1999';
- ERROR: date/time field value out of range: "08-01-1999"
- LINE 1: SELECT date '08-01-1999';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '01-08-99';
- ERROR: date/time field value out of range: "01-08-99"
- LINE 1: SELECT date '01-08-99';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '01-08-1999';
- ERROR: date/time field value out of range: "01-08-1999"
- LINE 1: SELECT date '01-08-1999';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '99-08-01';
- date
- ------------
- 1999-08-01
- (1 row)
- SELECT date '1999-08-01';
- date
- ------------
- 1999-08-01
- (1 row)
- SELECT date '99 01 08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '1999 01 08';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '08 01 99';
- ERROR: date/time field value out of range: "08 01 99"
- LINE 1: SELECT date '08 01 99';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '08 01 1999';
- ERROR: date/time field value out of range: "08 01 1999"
- LINE 1: SELECT date '08 01 1999';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '01 08 99';
- ERROR: date/time field value out of range: "01 08 99"
- LINE 1: SELECT date '01 08 99';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '01 08 1999';
- ERROR: date/time field value out of range: "01 08 1999"
- LINE 1: SELECT date '01 08 1999';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '99 08 01';
- date
- ------------
- 1999-08-01
- (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 '1/8/1999';
- date
- ------------
- 1999-08-01
- (1 row)
- SELECT date '1/18/1999';
- ERROR: date/time field value out of range: "1/18/1999"
- LINE 1: SELECT date '1/18/1999';
- ^
- HINT: Perhaps you need a different "datestyle" setting.
- SELECT date '18/1/1999';
- date
- ------------
- 1999-01-18
- (1 row)
- SELECT date '01/02/03';
- date
- ------------
- 2003-02-01
- (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: 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';
- 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-01-08
- (1 row)
- SELECT date '08-01-1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '01-08-99';
- date
- ------------
- 1999-08-01
- (1 row)
- SELECT date '01-08-1999';
- date
- ------------
- 1999-08-01
- (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-01-08
- (1 row)
- SELECT date '08 01 1999';
- date
- ------------
- 1999-01-08
- (1 row)
- SELECT date '01 08 99';
- date
- ------------
- 1999-08-01
- (1 row)
- SELECT date '01 08 1999';
- date
- ------------
- 1999-08-01
- (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)
- --
- -- test extract!
- --
- SELECT f1 as "date",
- date_part('year', f1) AS year,
- date_part('month', f1) AS month,
- date_part('day', f1) AS day,
- date_part('quarter', f1) AS quarter,
- date_part('decade', f1) AS decade,
- date_part('century', f1) AS century,
- date_part('millennium', f1) AS millennium,
- date_part('isoyear', f1) AS isoyear,
- date_part('week', f1) AS week,
- date_part('dow', f1) AS dow,
- date_part('isodow', f1) AS isodow,
- date_part('doy', f1) AS doy,
- date_part('julian', f1) AS julian,
- date_part('epoch', f1) AS epoch
- FROM date_tbl;
- date | year | month | day | quarter | decade | century | millennium | isoyear | week | dow | isodow | doy | julian | epoch
- ---------------+-------+-------+-----+---------+--------+---------+------------+---------+------+-----+--------+-----+---------+---------------
- 04-09-1957 | 1957 | 4 | 9 | 2 | 195 | 20 | 2 | 1957 | 15 | 2 | 2 | 99 | 2435938 | -401760000
- 06-13-1957 | 1957 | 6 | 13 | 2 | 195 | 20 | 2 | 1957 | 24 | 4 | 4 | 164 | 2436003 | -396144000
- 02-28-1996 | 1996 | 2 | 28 | 1 | 199 | 20 | 2 | 1996 | 9 | 3 | 3 | 59 | 2450142 | 825465600
- 02-29-1996 | 1996 | 2 | 29 | 1 | 199 | 20 | 2 | 1996 | 9 | 4 | 4 | 60 | 2450143 | 825552000
- 03-01-1996 | 1996 | 3 | 1 | 1 | 199 | 20 | 2 | 1996 | 9 | 5 | 5 | 61 | 2450144 | 825638400
- 03-02-1996 | 1996 | 3 | 2 | 1 | 199 | 20 | 2 | 1996 | 9 | 6 | 6 | 62 | 2450145 | 825724800
- 02-28-1997 | 1997 | 2 | 28 | 1 | 199 | 20 | 2 | 1997 | 9 | 5 | 5 | 59 | 2450508 | 857088000
- 03-01-1997 | 1997 | 3 | 1 | 1 | 199 | 20 | 2 | 1997 | 9 | 6 | 6 | 60 | 2450509 | 857174400
- 03-02-1997 | 1997 | 3 | 2 | 1 | 199 | 20 | 2 | 1997 | 9 | 0 | 7 | 61 | 2450510 | 857260800
- 04-01-2000 | 2000 | 4 | 1 | 2 | 200 | 20 | 2 | 2000 | 13 | 6 | 6 | 92 | 2451636 | 954547200
- 04-02-2000 | 2000 | 4 | 2 | 2 | 200 | 20 | 2 | 2000 | 13 | 0 | 7 | 93 | 2451637 | 954633600
- 04-03-2000 | 2000 | 4 | 3 | 2 | 200 | 20 | 2 | 2000 | 14 | 1 | 1 | 94 | 2451638 | 954720000
- 04-08-2038 | 2038 | 4 | 8 | 2 | 203 | 21 | 3 | 2038 | 14 | 4 | 4 | 98 | 2465522 | 2154297600
- 04-09-2039 | 2039 | 4 | 9 | 2 | 203 | 21 | 3 | 2039 | 14 | 6 | 6 | 99 | 2465888 | 2185920000
- 04-10-2040 | 2040 | 4 | 10 | 2 | 204 | 21 | 3 | 2040 | 15 | 2 | 2 | 101 | 2466255 | 2217628800
- 04-10-2040 BC | -2040 | 4 | 10 | 2 | -204 | -21 | -3 | -2040 | 15 | 1 | 1 | 100 | 976430 | -126503251200
- (16 rows)
- --
- -- epoch
- --
- SELECT EXTRACT(EPOCH FROM DATE '1970-01-01'); -- 0
- extract
- ---------
- 0
- (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 '0009-12-31'); -- 0
- extract
- ---------
- 0
- (1 row)
- SELECT EXTRACT(DECADE FROM DATE '0001-01-01 BC'); -- 0
- extract
- ---------
- 0
- (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(DOW FROM DATE '2020-08-16');
- extract
- ---------
- 0
- (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 trunc function!
- --
- SELECT DATE_TRUNC('MILLENNIUM', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1001
- date_trunc
- --------------------------
- Thu Jan 01 00:00:00 1001
- (1 row)
- SELECT DATE_TRUNC('MILLENNIUM', DATE '1970-03-20'); -- 1001-01-01
- date_trunc
- ------------------------------
- Thu Jan 01 00:00:00 1001 PST
- (1 row)
- SELECT DATE_TRUNC('CENTURY', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1901
- date_trunc
- --------------------------
- Tue Jan 01 00:00:00 1901
- (1 row)
- SELECT DATE_TRUNC('CENTURY', DATE '1970-03-20'); -- 1901
- date_trunc
- ------------------------------
- Tue Jan 01 00:00:00 1901 PST
- (1 row)
- SELECT DATE_TRUNC('CENTURY', DATE '2004-08-10'); -- 2001-01-01
- date_trunc
- ------------------------------
- Mon Jan 01 00:00:00 2001 PST
- (1 row)
- SELECT DATE_TRUNC('CENTURY', DATE '0002-02-04'); -- 0001-01-01
- date_trunc
- ------------------------------
- Mon Jan 01 00:00:00 0001 PST
- (1 row)
- SELECT DATE_TRUNC('CENTURY', DATE '0055-08-10 BC'); -- 0100-01-01 BC
- date_trunc
- ---------------------------------
- Tue Jan 01 00:00:00 0100 PST BC
- (1 row)
- SELECT DATE_TRUNC('DECADE', DATE '1993-12-25'); -- 1990-01-01
- date_trunc
- ------------------------------
- Mon Jan 01 00:00:00 1990 PST
- (1 row)
- SELECT DATE_TRUNC('DECADE', DATE '0004-12-25'); -- 0001-01-01 BC
- date_trunc
- ---------------------------------
- Sat Jan 01 00:00:00 0001 PST BC
- (1 row)
- SELECT DATE_TRUNC('DECADE', DATE '0002-12-31 BC'); -- 0011-01-01 BC
- date_trunc
- ---------------------------------
- Mon Jan 01 00:00:00 0011 PST BC
- (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)
- select isfinite('infinity'::date), isfinite('-infinity'::date), isfinite('today'::date);
- isfinite | isfinite | isfinite
- ----------+----------+----------
- f | f | 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
- -- test constructors
- select make_date(2013, 7, 15);
- make_date
- ------------
- 07-15-2013
- (1 row)
- select make_date(-44, 3, 15);
- make_date
- ---------------
- 03-15-0044 BC
- (1 row)
- 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
|