date.out 30 KB

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