date.out 19 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105
  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. --
  26. -- Check all the documented input formats
  27. --
  28. SET datestyle TO iso; -- display results in ISO
  29. SET datestyle TO ymd;
  30. SELECT date 'January 8, 1999';
  31. date
  32. ------------
  33. 1999-01-08
  34. (1 row)
  35. SELECT date '1999-01-08';
  36. date
  37. ------------
  38. 1999-01-08
  39. (1 row)
  40. SELECT date '1999-01-18';
  41. date
  42. ------------
  43. 1999-01-18
  44. (1 row)
  45. SELECT date '18/1/1999';
  46. ERROR: date/time field value out of range: "18/1/1999"
  47. LINE 1: SELECT date '18/1/1999';
  48. ^
  49. HINT: Perhaps you need a different "datestyle" setting.
  50. SELECT date '19990108';
  51. date
  52. ------------
  53. 1999-01-08
  54. (1 row)
  55. SELECT date '990108';
  56. date
  57. ------------
  58. 1999-01-08
  59. (1 row)
  60. SELECT date '1999.008';
  61. date
  62. ------------
  63. 1999-01-08
  64. (1 row)
  65. SELECT date 'J2451187';
  66. date
  67. ------------
  68. 1999-01-08
  69. (1 row)
  70. SELECT date '1999-Jan-08';
  71. date
  72. ------------
  73. 1999-01-08
  74. (1 row)
  75. SELECT date '08-Jan-1999';
  76. date
  77. ------------
  78. 1999-01-08
  79. (1 row)
  80. SELECT date 'Jan-08-1999';
  81. date
  82. ------------
  83. 1999-01-08
  84. (1 row)
  85. SELECT date '99-08-Jan';
  86. ERROR: invalid input syntax for type date: "99-08-Jan"
  87. LINE 1: SELECT date '99-08-Jan';
  88. ^
  89. SELECT date '1999-08-Jan';
  90. ERROR: invalid input syntax for type date: "1999-08-Jan"
  91. LINE 1: SELECT date '1999-08-Jan';
  92. ^
  93. SELECT date '1999 Jan 08';
  94. date
  95. ------------
  96. 1999-01-08
  97. (1 row)
  98. SELECT date '08 Jan 1999';
  99. date
  100. ------------
  101. 1999-01-08
  102. (1 row)
  103. SELECT date 'Jan 08 1999';
  104. date
  105. ------------
  106. 1999-01-08
  107. (1 row)
  108. SELECT date '1999 08 Jan';
  109. date
  110. ------------
  111. 1999-01-08
  112. (1 row)
  113. SELECT date '1999-01-08';
  114. date
  115. ------------
  116. 1999-01-08
  117. (1 row)
  118. SELECT date '1999-08-01';
  119. date
  120. ------------
  121. 1999-08-01
  122. (1 row)
  123. SELECT date '1999 01 08';
  124. date
  125. ------------
  126. 1999-01-08
  127. (1 row)
  128. SELECT date '1999 08 01';
  129. date
  130. ------------
  131. 1999-08-01
  132. (1 row)
  133. SET datestyle TO dmy;
  134. SELECT date 'January 8, 1999';
  135. date
  136. ------------
  137. 1999-01-08
  138. (1 row)
  139. SELECT date '1999-01-08';
  140. date
  141. ------------
  142. 1999-01-08
  143. (1 row)
  144. SELECT date '1999-01-18';
  145. date
  146. ------------
  147. 1999-01-18
  148. (1 row)
  149. SELECT date '19990108';
  150. date
  151. ------------
  152. 1999-01-08
  153. (1 row)
  154. SELECT date '990108';
  155. date
  156. ------------
  157. 1999-01-08
  158. (1 row)
  159. SELECT date '1999.008';
  160. date
  161. ------------
  162. 1999-01-08
  163. (1 row)
  164. SELECT date 'J2451187';
  165. date
  166. ------------
  167. 1999-01-08
  168. (1 row)
  169. SELECT date 'January 8, 99 BC';
  170. date
  171. ---------------
  172. 0099-01-08 BC
  173. (1 row)
  174. SELECT date '99-Jan-08';
  175. ERROR: date/time field value out of range: "99-Jan-08"
  176. LINE 1: SELECT date '99-Jan-08';
  177. ^
  178. HINT: Perhaps you need a different "datestyle" setting.
  179. SELECT date '1999-Jan-08';
  180. date
  181. ------------
  182. 1999-01-08
  183. (1 row)
  184. SELECT date '08-Jan-99';
  185. date
  186. ------------
  187. 1999-01-08
  188. (1 row)
  189. SELECT date '08-Jan-1999';
  190. date
  191. ------------
  192. 1999-01-08
  193. (1 row)
  194. SELECT date 'Jan-08-99';
  195. date
  196. ------------
  197. 1999-01-08
  198. (1 row)
  199. SELECT date 'Jan-08-1999';
  200. date
  201. ------------
  202. 1999-01-08
  203. (1 row)
  204. SELECT date '99-08-Jan';
  205. ERROR: invalid input syntax for type date: "99-08-Jan"
  206. LINE 1: SELECT date '99-08-Jan';
  207. ^
  208. SELECT date '1999-08-Jan';
  209. ERROR: invalid input syntax for type date: "1999-08-Jan"
  210. LINE 1: SELECT date '1999-08-Jan';
  211. ^
  212. SELECT date '1999 Jan 08';
  213. date
  214. ------------
  215. 1999-01-08
  216. (1 row)
  217. SELECT date '08 Jan 99';
  218. date
  219. ------------
  220. 1999-01-08
  221. (1 row)
  222. SELECT date '08 Jan 1999';
  223. date
  224. ------------
  225. 1999-01-08
  226. (1 row)
  227. SELECT date 'Jan 08 99';
  228. date
  229. ------------
  230. 1999-01-08
  231. (1 row)
  232. SELECT date 'Jan 08 1999';
  233. date
  234. ------------
  235. 1999-01-08
  236. (1 row)
  237. SELECT date '99 08 Jan';
  238. ERROR: invalid input syntax for type date: "99 08 Jan"
  239. LINE 1: SELECT date '99 08 Jan';
  240. ^
  241. SELECT date '1999 08 Jan';
  242. date
  243. ------------
  244. 1999-01-08
  245. (1 row)
  246. SELECT date '99-01-08';
  247. ERROR: date/time field value out of range: "99-01-08"
  248. LINE 1: SELECT date '99-01-08';
  249. ^
  250. HINT: Perhaps you need a different "datestyle" setting.
  251. SELECT date '1999-01-08';
  252. date
  253. ------------
  254. 1999-01-08
  255. (1 row)
  256. SELECT date '99-08-01';
  257. ERROR: date/time field value out of range: "99-08-01"
  258. LINE 1: SELECT date '99-08-01';
  259. ^
  260. HINT: Perhaps you need a different "datestyle" setting.
  261. SELECT date '1999-08-01';
  262. date
  263. ------------
  264. 1999-08-01
  265. (1 row)
  266. SELECT date '99 01 08';
  267. ERROR: date/time field value out of range: "99 01 08"
  268. LINE 1: SELECT date '99 01 08';
  269. ^
  270. HINT: Perhaps you need a different "datestyle" setting.
  271. SELECT date '1999 01 08';
  272. date
  273. ------------
  274. 1999-01-08
  275. (1 row)
  276. SELECT date '99 08 01';
  277. ERROR: date/time field value out of range: "99 08 01"
  278. LINE 1: SELECT date '99 08 01';
  279. ^
  280. HINT: Perhaps you need a different "datestyle" setting.
  281. SELECT date '1999 08 01';
  282. date
  283. ------------
  284. 1999-08-01
  285. (1 row)
  286. SET datestyle TO mdy;
  287. SELECT date 'January 8, 1999';
  288. date
  289. ------------
  290. 1999-01-08
  291. (1 row)
  292. SELECT date '1999-01-08';
  293. date
  294. ------------
  295. 1999-01-08
  296. (1 row)
  297. SELECT date '1999-01-18';
  298. date
  299. ------------
  300. 1999-01-18
  301. (1 row)
  302. SELECT date '1/8/1999';
  303. date
  304. ------------
  305. 1999-01-08
  306. (1 row)
  307. SELECT date '1/18/1999';
  308. date
  309. ------------
  310. 1999-01-18
  311. (1 row)
  312. SELECT date '18/1/1999';
  313. ERROR: date/time field value out of range: "18/1/1999"
  314. LINE 1: SELECT date '18/1/1999';
  315. ^
  316. HINT: Perhaps you need a different "datestyle" setting.
  317. SELECT date '01/02/03';
  318. date
  319. ------------
  320. 2003-01-02
  321. (1 row)
  322. SELECT date '19990108';
  323. date
  324. ------------
  325. 1999-01-08
  326. (1 row)
  327. SELECT date '990108';
  328. date
  329. ------------
  330. 1999-01-08
  331. (1 row)
  332. SELECT date '1999.008';
  333. date
  334. ------------
  335. 1999-01-08
  336. (1 row)
  337. SELECT date 'J2451187';
  338. date
  339. ------------
  340. 1999-01-08
  341. (1 row)
  342. SELECT date 'January 8, 99 BC';
  343. date
  344. ---------------
  345. 0099-01-08 BC
  346. (1 row)
  347. SELECT date '99-Jan-08';
  348. ERROR: date/time field value out of range: "99-Jan-08"
  349. LINE 1: SELECT date '99-Jan-08';
  350. ^
  351. HINT: Perhaps you need a different "datestyle" setting.
  352. SELECT date '1999-Jan-08';
  353. date
  354. ------------
  355. 1999-01-08
  356. (1 row)
  357. SELECT date '08-Jan-99';
  358. date
  359. ------------
  360. 1999-01-08
  361. (1 row)
  362. SELECT date '08-Jan-1999';
  363. date
  364. ------------
  365. 1999-01-08
  366. (1 row)
  367. SELECT date 'Jan-08-99';
  368. date
  369. ------------
  370. 1999-01-08
  371. (1 row)
  372. SELECT date 'Jan-08-1999';
  373. date
  374. ------------
  375. 1999-01-08
  376. (1 row)
  377. SELECT date '99-08-Jan';
  378. ERROR: invalid input syntax for type date: "99-08-Jan"
  379. LINE 1: SELECT date '99-08-Jan';
  380. ^
  381. SELECT date '1999-08-Jan';
  382. ERROR: invalid input syntax for type date: "1999-08-Jan"
  383. LINE 1: SELECT date '1999-08-Jan';
  384. ^
  385. SELECT date '99 Jan 08';
  386. ERROR: invalid input syntax for type date: "99 Jan 08"
  387. LINE 1: SELECT date '99 Jan 08';
  388. ^
  389. SELECT date '1999 Jan 08';
  390. date
  391. ------------
  392. 1999-01-08
  393. (1 row)
  394. SELECT date '08 Jan 99';
  395. date
  396. ------------
  397. 1999-01-08
  398. (1 row)
  399. SELECT date '08 Jan 1999';
  400. date
  401. ------------
  402. 1999-01-08
  403. (1 row)
  404. SELECT date 'Jan 08 99';
  405. date
  406. ------------
  407. 1999-01-08
  408. (1 row)
  409. SELECT date 'Jan 08 1999';
  410. date
  411. ------------
  412. 1999-01-08
  413. (1 row)
  414. SELECT date '99 08 Jan';
  415. ERROR: invalid input syntax for type date: "99 08 Jan"
  416. LINE 1: SELECT date '99 08 Jan';
  417. ^
  418. SELECT date '1999 08 Jan';
  419. date
  420. ------------
  421. 1999-01-08
  422. (1 row)
  423. SELECT date '99-01-08';
  424. ERROR: date/time field value out of range: "99-01-08"
  425. LINE 1: SELECT date '99-01-08';
  426. ^
  427. HINT: Perhaps you need a different "datestyle" setting.
  428. SELECT date '1999-01-08';
  429. date
  430. ------------
  431. 1999-01-08
  432. (1 row)
  433. SELECT date '08-01-99';
  434. date
  435. ------------
  436. 1999-08-01
  437. (1 row)
  438. SELECT date '08-01-1999';
  439. date
  440. ------------
  441. 1999-08-01
  442. (1 row)
  443. SELECT date '01-08-99';
  444. date
  445. ------------
  446. 1999-01-08
  447. (1 row)
  448. SELECT date '01-08-1999';
  449. date
  450. ------------
  451. 1999-01-08
  452. (1 row)
  453. SELECT date '99-08-01';
  454. ERROR: date/time field value out of range: "99-08-01"
  455. LINE 1: SELECT date '99-08-01';
  456. ^
  457. HINT: Perhaps you need a different "datestyle" setting.
  458. SELECT date '1999-08-01';
  459. date
  460. ------------
  461. 1999-08-01
  462. (1 row)
  463. SELECT date '99 01 08';
  464. ERROR: date/time field value out of range: "99 01 08"
  465. LINE 1: SELECT date '99 01 08';
  466. ^
  467. HINT: Perhaps you need a different "datestyle" setting.
  468. SELECT date '1999 01 08';
  469. date
  470. ------------
  471. 1999-01-08
  472. (1 row)
  473. SELECT date '08 01 99';
  474. date
  475. ------------
  476. 1999-08-01
  477. (1 row)
  478. SELECT date '08 01 1999';
  479. date
  480. ------------
  481. 1999-08-01
  482. (1 row)
  483. SELECT date '01 08 99';
  484. date
  485. ------------
  486. 1999-01-08
  487. (1 row)
  488. SELECT date '01 08 1999';
  489. date
  490. ------------
  491. 1999-01-08
  492. (1 row)
  493. SELECT date '99 08 01';
  494. ERROR: date/time field value out of range: "99 08 01"
  495. LINE 1: SELECT date '99 08 01';
  496. ^
  497. HINT: Perhaps you need a different "datestyle" setting.
  498. SELECT date '1999 08 01';
  499. date
  500. ------------
  501. 1999-08-01
  502. (1 row)
  503. -- Check upper and lower limits of date range
  504. SELECT date '4714-11-24 BC';
  505. date
  506. ---------------
  507. 4714-11-24 BC
  508. (1 row)
  509. SELECT date '4714-11-23 BC'; -- out of range
  510. ERROR: date out of range: "4714-11-23 BC"
  511. LINE 1: SELECT date '4714-11-23 BC';
  512. ^
  513. SELECT date '5874897-12-31';
  514. date
  515. ---------------
  516. 5874897-12-31
  517. (1 row)
  518. SELECT date '5874898-01-01'; -- out of range
  519. ERROR: date out of range: "5874898-01-01"
  520. LINE 1: SELECT date '5874898-01-01';
  521. ^
  522. RESET datestyle;
  523. --
  524. -- Simple math
  525. -- Leave most of it for the horology tests
  526. --
  527. SELECT f1 - date '2000-01-01' AS "Days From 2K" FROM DATE_TBL;
  528. Days From 2K
  529. --------------
  530. -15607
  531. -15542
  532. -1403
  533. -1402
  534. -1401
  535. -1400
  536. -1037
  537. -1036
  538. -1035
  539. 91
  540. 92
  541. 93
  542. 13977
  543. 14343
  544. 14710
  545. -1475115
  546. (16 rows)
  547. SELECT f1 - date 'epoch' AS "Days From Epoch" FROM DATE_TBL;
  548. Days From Epoch
  549. -----------------
  550. -4650
  551. -4585
  552. 9554
  553. 9555
  554. 9556
  555. 9557
  556. 9920
  557. 9921
  558. 9922
  559. 11048
  560. 11049
  561. 11050
  562. 24934
  563. 25300
  564. 25667
  565. -1464158
  566. (16 rows)
  567. SELECT date 'yesterday' - date 'today' AS "One day";
  568. One day
  569. ---------
  570. -1
  571. (1 row)
  572. SELECT date 'today' - date 'tomorrow' AS "One day";
  573. One day
  574. ---------
  575. -1
  576. (1 row)
  577. SELECT date 'yesterday' - date 'tomorrow' AS "Two days";
  578. Two days
  579. ----------
  580. -2
  581. (1 row)
  582. SELECT date 'tomorrow' - date 'today' AS "One day";
  583. One day
  584. ---------
  585. 1
  586. (1 row)
  587. SELECT date 'today' - date 'yesterday' AS "One day";
  588. One day
  589. ---------
  590. 1
  591. (1 row)
  592. SELECT date 'tomorrow' - date 'yesterday' AS "Two days";
  593. Two days
  594. ----------
  595. 2
  596. (1 row)
  597. --
  598. -- century
  599. --
  600. SELECT EXTRACT(CENTURY FROM DATE '0101-12-31 BC'); -- -2
  601. extract
  602. ---------
  603. -2
  604. (1 row)
  605. SELECT EXTRACT(CENTURY FROM DATE '0100-12-31 BC'); -- -1
  606. extract
  607. ---------
  608. -1
  609. (1 row)
  610. SELECT EXTRACT(CENTURY FROM DATE '0001-12-31 BC'); -- -1
  611. extract
  612. ---------
  613. -1
  614. (1 row)
  615. SELECT EXTRACT(CENTURY FROM DATE '0001-01-01'); -- 1
  616. extract
  617. ---------
  618. 1
  619. (1 row)
  620. SELECT EXTRACT(CENTURY FROM DATE '0001-01-01 AD'); -- 1
  621. extract
  622. ---------
  623. 1
  624. (1 row)
  625. SELECT EXTRACT(CENTURY FROM DATE '1900-12-31'); -- 19
  626. extract
  627. ---------
  628. 19
  629. (1 row)
  630. SELECT EXTRACT(CENTURY FROM DATE '1901-01-01'); -- 20
  631. extract
  632. ---------
  633. 20
  634. (1 row)
  635. SELECT EXTRACT(CENTURY FROM DATE '2000-12-31'); -- 20
  636. extract
  637. ---------
  638. 20
  639. (1 row)
  640. SELECT EXTRACT(CENTURY FROM DATE '2001-01-01'); -- 21
  641. extract
  642. ---------
  643. 21
  644. (1 row)
  645. SELECT EXTRACT(CENTURY FROM CURRENT_DATE)>=21 AS True; -- true
  646. true
  647. ------
  648. t
  649. (1 row)
  650. --
  651. -- millennium
  652. --
  653. SELECT EXTRACT(MILLENNIUM FROM DATE '0001-12-31 BC'); -- -1
  654. extract
  655. ---------
  656. -1
  657. (1 row)
  658. SELECT EXTRACT(MILLENNIUM FROM DATE '0001-01-01 AD'); -- 1
  659. extract
  660. ---------
  661. 1
  662. (1 row)
  663. SELECT EXTRACT(MILLENNIUM FROM DATE '1000-12-31'); -- 1
  664. extract
  665. ---------
  666. 1
  667. (1 row)
  668. SELECT EXTRACT(MILLENNIUM FROM DATE '1001-01-01'); -- 2
  669. extract
  670. ---------
  671. 2
  672. (1 row)
  673. SELECT EXTRACT(MILLENNIUM FROM DATE '2000-12-31'); -- 2
  674. extract
  675. ---------
  676. 2
  677. (1 row)
  678. SELECT EXTRACT(MILLENNIUM FROM DATE '2001-01-01'); -- 3
  679. extract
  680. ---------
  681. 3
  682. (1 row)
  683. -- next test to be fixed on the turn of the next millennium;-)
  684. SELECT EXTRACT(MILLENNIUM FROM CURRENT_DATE); -- 3
  685. extract
  686. ---------
  687. 3
  688. (1 row)
  689. --
  690. -- decade
  691. --
  692. SELECT EXTRACT(DECADE FROM DATE '1994-12-25'); -- 199
  693. extract
  694. ---------
  695. 199
  696. (1 row)
  697. SELECT EXTRACT(DECADE FROM DATE '0010-01-01'); -- 1
  698. extract
  699. ---------
  700. 1
  701. (1 row)
  702. SELECT EXTRACT(DECADE FROM DATE '0002-12-31 BC'); -- -1
  703. extract
  704. ---------
  705. -1
  706. (1 row)
  707. SELECT EXTRACT(DECADE FROM DATE '0011-01-01 BC'); -- -1
  708. extract
  709. ---------
  710. -1
  711. (1 row)
  712. SELECT EXTRACT(DECADE FROM DATE '0012-12-31 BC'); -- -2
  713. extract
  714. ---------
  715. -2
  716. (1 row)
  717. --
  718. -- all possible fields
  719. --
  720. SELECT EXTRACT(MICROSECONDS FROM DATE '2020-08-11');
  721. ERROR: date units "microseconds" not supported
  722. SELECT EXTRACT(MILLISECONDS FROM DATE '2020-08-11');
  723. ERROR: date units "milliseconds" not supported
  724. SELECT EXTRACT(SECOND FROM DATE '2020-08-11');
  725. ERROR: date units "second" not supported
  726. SELECT EXTRACT(MINUTE FROM DATE '2020-08-11');
  727. ERROR: date units "minute" not supported
  728. SELECT EXTRACT(HOUR FROM DATE '2020-08-11');
  729. ERROR: date units "hour" not supported
  730. SELECT EXTRACT(DAY FROM DATE '2020-08-11');
  731. extract
  732. ---------
  733. 11
  734. (1 row)
  735. SELECT EXTRACT(MONTH FROM DATE '2020-08-11');
  736. extract
  737. ---------
  738. 8
  739. (1 row)
  740. SELECT EXTRACT(YEAR FROM DATE '2020-08-11');
  741. extract
  742. ---------
  743. 2020
  744. (1 row)
  745. SELECT EXTRACT(YEAR FROM DATE '2020-08-11 BC');
  746. extract
  747. ---------
  748. -2020
  749. (1 row)
  750. SELECT EXTRACT(DECADE FROM DATE '2020-08-11');
  751. extract
  752. ---------
  753. 202
  754. (1 row)
  755. SELECT EXTRACT(CENTURY FROM DATE '2020-08-11');
  756. extract
  757. ---------
  758. 21
  759. (1 row)
  760. SELECT EXTRACT(MILLENNIUM FROM DATE '2020-08-11');
  761. extract
  762. ---------
  763. 3
  764. (1 row)
  765. SELECT EXTRACT(ISOYEAR FROM DATE '2020-08-11');
  766. extract
  767. ---------
  768. 2020
  769. (1 row)
  770. SELECT EXTRACT(ISOYEAR FROM DATE '2020-08-11 BC');
  771. extract
  772. ---------
  773. -2020
  774. (1 row)
  775. SELECT EXTRACT(QUARTER FROM DATE '2020-08-11');
  776. extract
  777. ---------
  778. 3
  779. (1 row)
  780. SELECT EXTRACT(WEEK FROM DATE '2020-08-11');
  781. extract
  782. ---------
  783. 33
  784. (1 row)
  785. SELECT EXTRACT(DOW FROM DATE '2020-08-11');
  786. extract
  787. ---------
  788. 2
  789. (1 row)
  790. SELECT EXTRACT(ISODOW FROM DATE '2020-08-11');
  791. extract
  792. ---------
  793. 2
  794. (1 row)
  795. SELECT EXTRACT(ISODOW FROM DATE '2020-08-16');
  796. extract
  797. ---------
  798. 7
  799. (1 row)
  800. SELECT EXTRACT(DOY FROM DATE '2020-08-11');
  801. extract
  802. ---------
  803. 224
  804. (1 row)
  805. SELECT EXTRACT(TIMEZONE FROM DATE '2020-08-11');
  806. ERROR: date units "timezone" not supported
  807. SELECT EXTRACT(TIMEZONE_M FROM DATE '2020-08-11');
  808. ERROR: date units "timezone_m" not supported
  809. SELECT EXTRACT(TIMEZONE_H FROM DATE '2020-08-11');
  810. ERROR: date units "timezone_h" not supported
  811. SELECT EXTRACT(EPOCH FROM DATE '2020-08-11');
  812. extract
  813. ------------
  814. 1597104000
  815. (1 row)
  816. SELECT EXTRACT(JULIAN FROM DATE '2020-08-11');
  817. extract
  818. ---------
  819. 2459073
  820. (1 row)
  821. --
  822. -- test infinity
  823. --
  824. select 'infinity'::date, '-infinity'::date;
  825. date | date
  826. ----------+-----------
  827. infinity | -infinity
  828. (1 row)
  829. select 'infinity'::date > 'today'::date as t;
  830. t
  831. ---
  832. t
  833. (1 row)
  834. select '-infinity'::date < 'today'::date as t;
  835. t
  836. ---
  837. t
  838. (1 row)
  839. --
  840. -- oscillating fields from non-finite date:
  841. --
  842. SELECT EXTRACT(DAY FROM DATE 'infinity'); -- NULL
  843. extract
  844. ---------
  845. (1 row)
  846. SELECT EXTRACT(DAY FROM DATE '-infinity'); -- NULL
  847. extract
  848. ---------
  849. (1 row)
  850. -- all supported fields
  851. SELECT EXTRACT(DAY FROM DATE 'infinity'); -- NULL
  852. extract
  853. ---------
  854. (1 row)
  855. SELECT EXTRACT(MONTH FROM DATE 'infinity'); -- NULL
  856. extract
  857. ---------
  858. (1 row)
  859. SELECT EXTRACT(QUARTER FROM DATE 'infinity'); -- NULL
  860. extract
  861. ---------
  862. (1 row)
  863. SELECT EXTRACT(WEEK FROM DATE 'infinity'); -- NULL
  864. extract
  865. ---------
  866. (1 row)
  867. SELECT EXTRACT(DOW FROM DATE 'infinity'); -- NULL
  868. extract
  869. ---------
  870. (1 row)
  871. SELECT EXTRACT(ISODOW FROM DATE 'infinity'); -- NULL
  872. extract
  873. ---------
  874. (1 row)
  875. SELECT EXTRACT(DOY FROM DATE 'infinity'); -- NULL
  876. extract
  877. ---------
  878. (1 row)
  879. --
  880. -- monotonic fields from non-finite date:
  881. --
  882. SELECT EXTRACT(EPOCH FROM DATE 'infinity'); -- Infinity
  883. extract
  884. ----------
  885. Infinity
  886. (1 row)
  887. SELECT EXTRACT(EPOCH FROM DATE '-infinity'); -- -Infinity
  888. extract
  889. -----------
  890. -Infinity
  891. (1 row)
  892. -- all supported fields
  893. SELECT EXTRACT(YEAR FROM DATE 'infinity'); -- Infinity
  894. extract
  895. ----------
  896. Infinity
  897. (1 row)
  898. SELECT EXTRACT(DECADE FROM DATE 'infinity'); -- Infinity
  899. extract
  900. ----------
  901. Infinity
  902. (1 row)
  903. SELECT EXTRACT(CENTURY FROM DATE 'infinity'); -- Infinity
  904. extract
  905. ----------
  906. Infinity
  907. (1 row)
  908. SELECT EXTRACT(MILLENNIUM FROM DATE 'infinity'); -- Infinity
  909. extract
  910. ----------
  911. Infinity
  912. (1 row)
  913. SELECT EXTRACT(JULIAN FROM DATE 'infinity'); -- Infinity
  914. extract
  915. ----------
  916. Infinity
  917. (1 row)
  918. SELECT EXTRACT(ISOYEAR FROM DATE 'infinity'); -- Infinity
  919. extract
  920. ----------
  921. Infinity
  922. (1 row)
  923. SELECT EXTRACT(EPOCH FROM DATE 'infinity'); -- Infinity
  924. extract
  925. ----------
  926. Infinity
  927. (1 row)
  928. --
  929. -- wrong fields from non-finite date:
  930. --
  931. SELECT EXTRACT(MICROSEC FROM DATE 'infinity'); -- error
  932. ERROR: date units "microsec" not recognized
  933. select make_time(8, 20, 0.0);
  934. make_time
  935. -----------
  936. 08:20:00
  937. (1 row)
  938. -- should fail
  939. select make_date(0, 7, 15);
  940. ERROR: date field value out of range: 0-07-15
  941. select make_date(2013, 2, 30);
  942. ERROR: date field value out of range: 2013-02-30
  943. select make_date(2013, 13, 1);
  944. ERROR: date field value out of range: 2013-13-01
  945. select make_date(2013, 11, -1);
  946. ERROR: date field value out of range: 2013-11--1
  947. select make_time(10, 55, 100.1);
  948. ERROR: time field value out of range: 10:55:100.1
  949. select make_time(24, 0, 2.1);
  950. ERROR: time field value out of range: 24:00:2.1