dates-times.slt 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. mode cockroach
  10. statement ok
  11. CREATE TABLE dateish (
  12. a DATE
  13. )
  14. statement ok
  15. INSERT INTO dateish VALUES (DATE '2000-01-01'), (DATE '2019-12-31')
  16. query T rowsort
  17. SELECT a FROM dateish
  18. ----
  19. 2000-01-01
  20. 2019-12-31
  21. query T
  22. SELECT max(a) FROM dateish
  23. ----
  24. 2019-12-31
  25. query T
  26. SELECT min(a) FROM dateish
  27. ----
  28. 2000-01-01
  29. statement ok
  30. CREATE TABLE timestampish (
  31. b timestamp
  32. )
  33. statement ok
  34. INSERT INTO timestampish
  35. VALUES
  36. (TIMESTAMP '1969-06-01 10:10:10.410'),
  37. (TIMESTAMP '1997-02-03 11:12:59.9'),
  38. (TIMESTAMP '2020-01-01 1:2:3.789')
  39. query T rowsort
  40. SELECT b FROM timestampish
  41. ----
  42. 1969-06-01 10:10:10.41
  43. 1997-02-03 11:12:59.9
  44. 2020-01-01 01:02:03.789
  45. query T
  46. SELECT max(b) FROM timestampish
  47. ----
  48. 2020-01-01 01:02:03.789
  49. query T
  50. SELECT min(b) FROM timestampish
  51. ----
  52. 1969-06-01 10:10:10.41
  53. statement ok
  54. CREATE TABLE timeish (
  55. b time
  56. )
  57. statement ok
  58. INSERT INTO timeish
  59. VALUES
  60. (TIME '10:10:10.410'),
  61. (TIME '11:12:59.9'),
  62. (TIME '1:2:3.789')
  63. query T rowsort
  64. SELECT b FROM timeish
  65. ----
  66. 10:10:10.41
  67. 11:12:59.9
  68. 01:02:03.789
  69. query T
  70. SELECT max(b) FROM timeish
  71. ----
  72. 11:12:59.9
  73. query T
  74. SELECT min(b) FROM timeish
  75. ----
  76. 01:02:03.789
  77. query T
  78. SELECT INTERVAL '1' MONTH
  79. ----
  80. 1 month
  81. query T
  82. SELECT INTERVAL '1' YEAR
  83. ----
  84. 1 year
  85. query T
  86. SELECT INTERVAL '1-3' YEAR TO MONTH
  87. ----
  88. 1 year 3 months
  89. query T
  90. SELECT INTERVAL '1' MINUTE
  91. ----
  92. 00:01:00
  93. query T
  94. SELECT INTERVAL '1 MIN'
  95. ----
  96. 00:01:00
  97. query T
  98. SELECT INTERVAL '1 MINS'
  99. ----
  100. 00:01:00
  101. query T
  102. SELECT INTERVAL '1 SECS'
  103. ----
  104. 00:00:01
  105. query T
  106. SELECT INTERVAL '1 SEC'
  107. ----
  108. 00:00:01
  109. statement ok
  110. CREATE TABLE iv_ish (
  111. b interval
  112. )
  113. statement ok
  114. INSERT INTO iv_ish VALUES (INTERVAL '1' YEAR), (INTERVAL '3' HOUR), (INTERVAL '4d 2h' DAY TO HOUR)
  115. query T rowsort
  116. SELECT * FROM iv_ish
  117. ----
  118. 4 days 02:00:00
  119. 1 year
  120. 03:00:00
  121. # Date-time literals
  122. query T
  123. SELECT DATE '2000-01-01'
  124. ----
  125. 2000-01-01
  126. query T
  127. SELECT DATE '2000 01-01'
  128. ----
  129. 2000-01-01
  130. query T
  131. SELECT DATE '2000 01 01'
  132. ----
  133. 2000-01-01
  134. query T
  135. SELECT DATE '20000101'
  136. ----
  137. 2000-01-01
  138. statement error
  139. SELECT DATE '2000-01 01'
  140. query T
  141. SELECT TIMESTAMP '2000-01-01 01:02:03'
  142. ----
  143. 2000-01-01 01:02:03
  144. query T
  145. SELECT TIMESTAMP '2000 01-01 01:02:03'
  146. ----
  147. 2000-01-01 01:02:03
  148. query T
  149. SELECT TIMESTAMP '2000 01 01 01:02:03'
  150. ----
  151. 2000-01-01 01:02:03
  152. query T
  153. SELECT TIMESTAMP '20010101 01:02:03';
  154. ----
  155. 2001-01-01 01:02:03
  156. statement error
  157. SELECT TIMESTAMP '2000-01 01 01:02:03'
  158. # Date arithmetic with month intervals.
  159. query T
  160. SELECT DATE '2000-01-01' + INTERVAL '1' MONTH
  161. ----
  162. 2000-02-01 00:00:00
  163. # Test that DATE + INTERVAL addition works in both orders.
  164. query T
  165. SELECT INTERVAL '1' MONTH + DATE '2000-01-01'
  166. ----
  167. 2000-02-01 00:00:00
  168. query T
  169. SELECT DATE '2000-01-01' + INTERVAL '1' YEAR
  170. ----
  171. 2001-01-01 00:00:00
  172. query T
  173. SELECT DATE '2000-01-01' + INTERVAL '-1' MONTH
  174. ----
  175. 1999-12-01 00:00:00
  176. query T
  177. SELECT DATE '2000-01-01' - INTERVAL '1' MONTH
  178. ----
  179. 1999-12-01 00:00:00
  180. query T
  181. SELECT DATE '2000-01-01' - INTERVAL '-1' MONTH
  182. ----
  183. 2000-02-01 00:00:00
  184. query T
  185. SELECT DATE '2000-01-01' - INTERVAL '1' YEAR
  186. ----
  187. 1999-01-01 00:00:00
  188. query error operator does not exist: interval \- date
  189. SELECT INTERVAL '1' YEAR - DATE '2000-01-01'
  190. query T
  191. SELECT DATE '2000-01-01' + TIME '01:02:03'
  192. ----
  193. 2000-01-01 01:02:03
  194. # Date arithmetic with self. Should behave as interval.
  195. query T
  196. SELECT DATE '2019-02-03' - DATE '2019-01-01';
  197. ----
  198. 33
  199. # Time arithmetic with intervals.
  200. query T
  201. SELECT TIME '01:02:03' + INTERVAL '04:05:06'
  202. ----
  203. 05:07:09
  204. query T
  205. SELECT TIME '04:05:06' - INTERVAL '01:02:03'
  206. ----
  207. 03:03:03
  208. query T
  209. SELECT TIME '01:02:03' - INTERVAL '04:05:06'
  210. ----
  211. 20:56:57
  212. query T
  213. SELECT TIME '04:05:06' + INTERVAL '-01:02:03'
  214. ----
  215. 03:03:03
  216. query T
  217. SELECT TIME '01:02:03' - INTERVAL '-04:05:06'
  218. ----
  219. 05:07:09
  220. # Time arithmetic with self. Should behave as interval
  221. query T
  222. SELECT TIME '04:05:06' - TIME '01:02:03'
  223. ----
  224. 03:03:03
  225. query T
  226. SELECT TIME '01:02:03' - TIME '04:05:06'
  227. ----
  228. -03:03:03
  229. # Timestamp arithmetic with month intervals. Should behave the same as DATE.
  230. query T
  231. SELECT TIMESTAMP '2000-01-01 00:00:00' + INTERVAL '1' YEAR
  232. ----
  233. 2001-01-01 00:00:00
  234. query T
  235. SELECT TIMESTAMP '2000-01-01 00:00:00' - INTERVAL '1' YEAR
  236. ----
  237. 1999-01-01 00:00:00
  238. query error operator does not exist: interval \- timestamp
  239. SELECT INTERVAL '1' YEAR - TIMESTAMP '2000-01-01 00:00:00'
  240. # Date arithmetic with duration intervals.
  241. query T
  242. SELECT DATE '2000-01-01' + INTERVAL '7' DAY
  243. ----
  244. 2000-01-08 00:00:00
  245. # Test that DATE + INTERVAL addition works in both orders.
  246. query T
  247. SELECT INTERVAL '7' DAY + DATE '2000-01-01'
  248. ----
  249. 2000-01-08 00:00:00
  250. query T
  251. SELECT INTERVAL '2 YRS 5 DAYS'
  252. ----
  253. 2 years 5 days
  254. query T
  255. SELECT INTERVAL '2 YR 5 DAYS'
  256. ----
  257. 2 years 5 days
  258. query T
  259. SELECT DATE '2000-01-01' + INTERVAL '7 5:4:3.2' DAY TO SECOND
  260. ----
  261. 2000-01-08 05:04:03.2
  262. query T
  263. SELECT DATE '2000-01-01' + INTERVAL '4' HOUR
  264. ----
  265. 2000-01-01 04:00:00
  266. query T
  267. SELECT DATE '2000-01-01' + INTERVAL '4 HR'
  268. ----
  269. 2000-01-01 04:00:00
  270. query T
  271. SELECT DATE '2000-01-01' + INTERVAL '3' MINUTE
  272. ----
  273. 2000-01-01 00:03:00
  274. query T
  275. SELECT DATE '2000-01-01' + INTERVAL '22' SECOND
  276. ----
  277. 2000-01-01 00:00:22
  278. query T
  279. SELECT DATE '2000-01-01' + INTERVAL '22.0044' SECOND
  280. ----
  281. 2000-01-01 00:00:22.0044
  282. query T
  283. SELECT DATE '2000-01-01' - INTERVAL '22' DAY
  284. ----
  285. 1999-12-10 00:00:00
  286. query T
  287. SELECT DATE '2000-01-01' - INTERVAL '22' SECOND
  288. ----
  289. 1999-12-31 23:59:38
  290. # Timestamp arithmetic with duration intervals.
  291. query T
  292. SELECT TIMESTAMP '2000-01-01 00:00:00' + INTERVAL '7' HOUR
  293. ----
  294. 2000-01-01 07:00:00
  295. # date and time comparisons after interval math
  296. query B
  297. SELECT DATE '2000-01-01' < DATE '1999-01-01' + INTERVAL '2' YEAR
  298. ----
  299. true
  300. query B
  301. SELECT DATE '2000-01-01' > DATE '1999-01-01' + INTERVAL '2' YEAR
  302. ----
  303. false
  304. query B
  305. SELECT DATE '2000-01-01' <= DATE '1999-01-01' + INTERVAL '2' YEAR
  306. ----
  307. true
  308. query B
  309. SELECT DATE '2000-01-01' >= DATE '1999-01-01' + INTERVAL '2' YEAR
  310. ----
  311. false
  312. query T
  313. SELECT DATE '2001-01-01' + INTERVAL '3' YEAR
  314. ----
  315. 2004-01-01 00:00:00
  316. # Check Comparisons
  317. query T
  318. SELECT * FROM dateish WHERE a <= DATE '1999-01-01' + INTERVAL '2' YEAR
  319. ----
  320. 2000-01-01
  321. query T
  322. SELECT * FROM dateish WHERE a < DATE '1999-01-01' + INTERVAL '2' YEAR
  323. ----
  324. 2000-01-01
  325. query T
  326. SELECT * FROM dateish WHERE a <= DATE '1999-12-31' + INTERVAL '2' DAY
  327. ----
  328. 2000-01-01
  329. query T
  330. SELECT * FROM dateish WHERE a = DATE '1999-12-31' + INTERVAL '1' DAY
  331. ----
  332. 2000-01-01
  333. # same as above, but inverted
  334. query T
  335. SELECT * FROM dateish WHERE a >= DATE '1999-01-01' + INTERVAL '2' YEAR
  336. ----
  337. 2019-12-31
  338. query T
  339. SELECT * FROM dateish WHERE a > DATE '1999-01-01' + INTERVAL '2' YEAR
  340. ----
  341. 2019-12-31
  342. query T
  343. SELECT * FROM dateish WHERE a >= DATE '1999-12-31' + INTERVAL '2' DAY
  344. ----
  345. 2019-12-31
  346. query T
  347. SELECT * FROM dateish WHERE a != DATE '1999-12-31' + INTERVAL '1' DAY
  348. ----
  349. 2019-12-31
  350. query T rowsort
  351. SELECT * FROM dateish WHERE a != DATE '1999-12-31' + INTERVAL '2' DAY
  352. ----
  353. 2000-01-01
  354. 2019-12-31
  355. # Comparisons with timestamps
  356. statement ok
  357. CREATE TABLE timestamp_compares (
  358. c timestamp
  359. )
  360. statement ok
  361. INSERT INTO timestamp_compares
  362. VALUES
  363. (TIMESTAMP '1999-12-31 01:01:01'),
  364. (TIMESTAMP '2009-01-01 09:09:09.9')
  365. query T
  366. SELECT c FROM timestamp_compares WHERE c = TIMESTAMP '2009-01-01 09:09:09.9'
  367. ----
  368. 2009-01-01 09:09:09.9
  369. query T
  370. SELECT c FROM timestamp_compares WHERE c = TIMESTAMP '2008-12-31 09:09:09.9' + INTERVAL '1' DAY
  371. ----
  372. 2009-01-01 09:09:09.9
  373. query T
  374. SELECT c FROM timestamp_compares WHERE c = TIMESTAMP '2008-12-01 09:09:09.9' + INTERVAL '1' MONTH
  375. ----
  376. 2009-01-01 09:09:09.9
  377. query T rowsort
  378. SELECT c FROM timestamp_compares WHERE c < TIMESTAMP '2008-12-31 09:09:09.9' + INTERVAL '2' MONTH
  379. ----
  380. 1999-12-31 01:01:01
  381. 2009-01-01 09:09:09.9
  382. # some inverses
  383. query T
  384. SELECT c FROM timestamp_compares WHERE c != TIMESTAMP '2009-01-01 09:09:09.9'
  385. ----
  386. 1999-12-31 01:01:01
  387. query T
  388. SELECT c FROM timestamp_compares WHERE c != TIMESTAMP '2008-12-31 09:09:09.9' + INTERVAL '1' DAY
  389. ----
  390. 1999-12-31 01:01:01
  391. query T
  392. SELECT c FROM timestamp_compares WHERE c != TIMESTAMP '2008-12-01 09:09:09.9' + INTERVAL '1' MONTH
  393. ----
  394. 1999-12-31 01:01:01
  395. query T rowsort
  396. SELECT c FROM timestamp_compares WHERE c > TIMESTAMP '2008-12-31 09:09:09.9' + INTERVAL '2' MONTH
  397. ----
  398. statement ok
  399. CREATE TABLE timestampwithtzish (
  400. t timestamp
  401. )
  402. statement ok
  403. INSERT INTO timestampwithtzish
  404. VALUES
  405. (TIMESTAMP WITH TIME ZONE '1999-12-31 11:11:01+04:00'),
  406. (TIMESTAMP WITH TIME ZONE '1999-12-31 16:16:01+02:30'),
  407. (TIMESTAMP WITH TIME ZONE '1999-12-31 20:00:00-12'),
  408. (TIMESTAMP WITH TIME ZONE '1999-12-31 18:00:00+12')
  409. query T rowsort
  410. SELECT * FROM timestampwithtzish
  411. ----
  412. 1999-12-31 06:00:00
  413. 1999-12-31 07:11:01
  414. 1999-12-31 13:46:01
  415. 2000-01-01 08:00:00
  416. statement ok
  417. CREATE TABLE timestamptzish (
  418. t timestamptz
  419. )
  420. statement ok
  421. INSERT INTO timestamptzish
  422. VALUES
  423. (TIMESTAMPTZ '1999-12-31 11:11:01+04:00'),
  424. (TIMESTAMPTZ '1999-12-31 16:16:01+02:30'),
  425. (TIMESTAMPTZ '1999-12-31 20:00:00-12'),
  426. (TIMESTAMPTZ '1999-12-31 18:00:00+12')
  427. query T rowsort
  428. SELECT * FROM timestamptzish
  429. ----
  430. 1999-12-31 06:00:00+00
  431. 1999-12-31 07:11:01+00
  432. 1999-12-31 13:46:01+00
  433. 2000-01-01 08:00:00+00
  434. query T
  435. SELECT max(t) FROM timestamptzish
  436. ----
  437. 2000-01-01 08:00:00+00
  438. query T
  439. SELECT min(t) FROM timestamptzish
  440. ----
  441. 1999-12-31 06:00:00+00
  442. # Timestamptz arithmetic with month intervals. Should behave the same as DATE and timestamp
  443. query T
  444. SELECT TIMESTAMPTZ '2000-01-01 00:00:00-6' + INTERVAL '1' YEAR
  445. ----
  446. 2001-01-01 06:00:00+00
  447. query T
  448. SELECT TIMESTAMPTZ '2000-01-01 00:00:00-7' - INTERVAL '1' YEAR
  449. ----
  450. 1999-01-01 07:00:00+00
  451. query T
  452. SELECT TIMESTAMPTZ '2000-01-01 00:00:00-6' + INTERVAL '3' MONTH
  453. ----
  454. 2000-04-01 06:00:00+00
  455. query T
  456. SELECT TIMESTAMPTZ '2000-01-01 00:00:00-7' - INTERVAL '4' MONTH
  457. ----
  458. 1999-09-01 07:00:00+00
  459. query error operator does not exist: interval \- timestamp with time zone
  460. SELECT INTERVAL '1' YEAR - TIMESTAMPTZ '2000-01-01 00:00:00-4:00'
  461. # Timestamptz arithmetic with duration intervals.
  462. query T
  463. SELECT TIMESTAMPTZ '2000-01-01 00:00:00-04' + INTERVAL '7' HOUR
  464. ----
  465. 2000-01-01 11:00:00+00
  466. query T
  467. SELECT TIMESTAMPTZ '2000-01-01 00:00:00-04' + INTERVAL '3' MINUTE
  468. ----
  469. 2000-01-01 04:03:00+00
  470. query T
  471. SELECT INTERVAL '6' HOUR + TIMESTAMPTZ '2000-01-01 00:00:00-04'
  472. ----
  473. 2000-01-01 10:00:00+00
  474. query T
  475. SELECT TIMESTAMPTZ '2000-01-01 00:00:00-04' - INTERVAL '2' HOUR
  476. ----
  477. 2000-01-01 02:00:00+00
  478. query error operator does not exist: interval \- timestamp with time zone
  479. SELECT INTERVAL '2' HOUR - TIMESTAMPTZ '2000-01-01 00:00:00-04'
  480. query error operator does not exist: timestamp with time zone \* interval
  481. SELECT TIMESTAMPTZ '2000-01-01 00:00:00-04' * INTERVAL '2' HOUR
  482. query error operator does not exist: timestamp with time zone / interval
  483. SELECT TIMESTAMPTZ '2000-01-01 00:00:00-04' / INTERVAL '2' HOUR
  484. query error operator does not exist: timestamp with time zone \+ timestamp with time zone
  485. SELECT TIMESTAMPTZ '2000-01-01 00:00:00-04' + TIMESTAMPTZ '1999-01-01 00:00:00z'
  486. query error operator does not exist: timestamp with time zone \+ timestamp
  487. SELECT TIMESTAMPTZ '2000-01-01 00:00:00-04' + TIMESTAMP '1999-01-01 00:00:00'
  488. # Tests with comparison operators and timestamptz
  489. query B
  490. SELECT TIMESTAMPTZ '2000-01-01 00:00:00+01' < TIMESTAMPTZ '2000-01-01 00:00:00-04'
  491. ----
  492. true
  493. query B
  494. SELECT TIMESTAMPTZ '2000-01-01 00:00:00+01' > TIMESTAMPTZ '2000-01-01 00:00:00-04'
  495. ----
  496. false
  497. query B
  498. SELECT TIMESTAMPTZ '2000-01-01 00:00:00+01' <= TIMESTAMPTZ '2000-01-01 00:00:00-04'
  499. ----
  500. true
  501. query B
  502. SELECT TIMESTAMPTZ '2000-01-01 00:00:00+01' >= TIMESTAMPTZ '2000-01-01 00:00:00-04'
  503. ----
  504. false
  505. query B
  506. SELECT TIMESTAMPTZ '2000-01-01 02:00:00+01' = TIMESTAMPTZ '2000-01-01 01:00:00z'
  507. ----
  508. true
  509. query B
  510. SELECT TIMESTAMPTZ '2000-01-01 02:00:00+01' >= TIMESTAMPTZ '2000-01-01 01:00:00z'
  511. ----
  512. true
  513. query B
  514. SELECT TIMESTAMPTZ '2000-01-01 02:00:00+01' <= TIMESTAMPTZ '2000-01-01 01:00:00z'
  515. ----
  516. true
  517. query B
  518. SELECT TIMESTAMPTZ '2000-01-01 02:00:00+01' != TIMESTAMPTZ '2000-01-01 01:00:00z'
  519. ----
  520. false
  521. # Tests with comparison operators across different time types
  522. query B
  523. SELECT TIMESTAMP '2000-01-01 00:00:00' > DATE '2000-01-01'
  524. ----
  525. false
  526. query B
  527. SELECT TIMESTAMPTZ '2000-01-01 00:00:00+4' > DATE '2000-01-01'
  528. ----
  529. false
  530. query B
  531. SELECT DATE '2001-01-01' > TIMESTAMPTZ '2000-01-01 00:00:00+4'
  532. ----
  533. true
  534. query B
  535. SELECT TIMESTAMPTZ '2000-01-01 00:00:00+4' > TIMESTAMP '2000-01-01 01:00:00'
  536. ----
  537. false
  538. query B
  539. SELECT TIMESTAMP '2000-01-01 00:00:00' > TIMESTAMPTZ '2000-01-01 01:00:00+04'
  540. ----
  541. true
  542. # Timestamptz comparisons after interval math
  543. query B
  544. SELECT TIMESTAMPTZ '2000-01-01 01:00:00+01' < TIMESTAMPTZ '2000-01-01 00:01:00z' + INTERVAL '1' HOUR
  545. ----
  546. true
  547. query B
  548. SELECT TIMESTAMPTZ '2000-01-01 01:00:00+01' <= TIMESTAMPTZ '2000-01-01 00:01:00z' + INTERVAL '1' HOUR
  549. ----
  550. true
  551. query B
  552. SELECT TIMESTAMPTZ '2000-01-01 01:00:00+01' > TIMESTAMPTZ '2000-01-01 00:01:00z' + INTERVAL '1' HOUR
  553. ----
  554. false
  555. query B
  556. SELECT TIMESTAMPTZ '2000-01-01 01:00:00+01' >= TIMESTAMPTZ '2000-01-01 00:01:00z' + INTERVAL '1' HOUR
  557. ----
  558. false
  559. query B
  560. SELECT TIMESTAMPTZ '2000-01-01 01:00:00+01' + INTERVAL '3' HOUR > TIMESTAMPTZ '2000-01-01 00:01:00z' + INTERVAL '1' HOUR
  561. ----
  562. true
  563. query B
  564. SELECT TIMESTAMPTZ '2000-01-01 01:00:00+01' + INTERVAL '1' MINUTE != TIMESTAMPTZ '2000-01-01 00:01:00+01' + INTERVAL '1' HOUR
  565. ----
  566. false
  567. # comparisons with timestamptz
  568. query T
  569. SELECT t FROM timestamptzish WHERE t = TIMESTAMPTZ '1999-12-31 13:46:01z'
  570. ----
  571. 1999-12-31 13:46:01+00
  572. query T
  573. SELECT t FROM timestamptzish WHERE t = TIMESTAMP '1999-12-31 13:46:01'
  574. ----
  575. 1999-12-31 13:46:01+00
  576. query T
  577. SELECT t FROM timestamptzish WHERE t = TIMESTAMPTZ '1999-12-31 9:46:01-04'
  578. ----
  579. 1999-12-31 13:46:01+00
  580. query T
  581. SELECT t FROM timestamptzish WHERE t > TIMESTAMPTZ '1999-12-31 9:46:01-04'
  582. ----
  583. 2000-01-01 08:00:00+00
  584. query T rowsort
  585. SELECT t FROM timestamptzish WHERE t >= TIMESTAMPTZ '1999-12-31 9:46:01-04'
  586. ----
  587. 1999-12-31 13:46:01+00
  588. 2000-01-01 08:00:00+00
  589. query T rowsort
  590. SELECT t FROM timestamptzish WHERE t < TIMESTAMPTZ '1999-12-31 9:46:01-04'
  591. ----
  592. 1999-12-31 06:00:00+00
  593. 1999-12-31 07:11:01+00
  594. query T rowsort
  595. SELECT t FROM timestamptzish WHERE t <= TIMESTAMPTZ '1999-12-31 9:46:01-04'
  596. ----
  597. 1999-12-31 06:00:00+00
  598. 1999-12-31 07:11:01+00
  599. 1999-12-31 13:46:01+00
  600. query T rowsort
  601. SELECT t FROM timestamptzish WHERE t > TIMESTAMPTZ '1999-12-31 9:46:01-04' - INTERVAL '12' HOUR
  602. ----
  603. 1999-12-31 06:00:00+00
  604. 1999-12-31 07:11:01+00
  605. 1999-12-31 13:46:01+00
  606. 2000-01-01 08:00:00+00
  607. # Tests now() and current_timestamp()
  608. query B
  609. SELECT now() > timestamp '2015-06-13 00:00:00'
  610. ----
  611. true
  612. query B
  613. SELECT now() + INTERVAL '100' HOUR > now()
  614. ----
  615. true
  616. query B
  617. SELECT current_timestamp() > TIMESTAMP '2016-06-13 00:00:00'
  618. ----
  619. true
  620. query B
  621. SELECT current_timestamp > TIMESTAMP '2016-06-13 00:00:00'
  622. ----
  623. true
  624. statement ok
  625. CREATE VIEW logical_timestamp_view(ts) AS SELECT mz_now()
  626. # Equivalent to running `SELECT mz_now()` directly. If there are
  627. # other objects in the same time domain as the view, they will dictate what is
  628. # returned. Otherwise it defaults to the epoch millisecond timeline.
  629. query T
  630. SELECT ts < 18446744073709551615 FROM logical_timestamp_view
  631. ----
  632. true
  633. statement ok
  634. CREATE VIEW now_view AS SELECT now() AS ts
  635. query B
  636. SELECT ts > TIMESTAMP '2016-06-13 00:00:00' FROM now_view
  637. ----
  638. true
  639. query T
  640. SELECT (DATE '2000-01-01')::text
  641. ----
  642. 2000-01-01
  643. query T
  644. SELECT (TIMESTAMP '2000-01-01 00:00:00')::text
  645. ----
  646. 2000-01-01 00:00:00
  647. query T
  648. SELECT (TIMESTAMPTZ '2000-01-01 00:00:00-6')::text
  649. ----
  650. 2000-01-01 06:00:00+00
  651. query T
  652. SELECT (INTERVAL '1-3' YEAR TO MONTH)::text
  653. ----
  654. 1 year 3 months
  655. query RRRRR
  656. SELECT EXTRACT(HOUR from TIME '11:12:42.666'),
  657. EXTRACT(MINUTE from TIME '11:12:42.666'),
  658. EXTRACT(SECOND from TIME '11:12:42.666'),
  659. EXTRACT(MILLISECONDS from TIME '11:12:42.666'),
  660. EXTRACT(MICROSECONDS from TIME '11:12:42.666')
  661. ----
  662. 11 12 42.666 42666 42666000
  663. query RRRRR
  664. SELECT date_part('HOUR', TIME '11:12:42.666'),
  665. date_part('MINUTE', TIME '11:12:42.666'),
  666. date_part('SECOND', TIME '11:12:42.666'),
  667. date_part('MILLISECONDS', TIME '11:12:42.666'),
  668. date_part('MICROSECONDS', TIME '11:12:42.666')
  669. ----
  670. 11 12 42.666 42666 42666000
  671. query error unit 'millennium' not supported for type time
  672. SELECT EXTRACT(MILLENNIUM from TIME '11:12:42.666')
  673. query error unit 'century' not supported for type time
  674. SELECT EXTRACT(CENTURY from TIME '11:12:42.666')
  675. query error unit 'decade' not supported for type time
  676. SELECT EXTRACT(DECADE from TIME '11:12:42.666')
  677. query error unit 'year' not supported for type time
  678. SELECT EXTRACT(YEAR from TIME '11:12:42.666')
  679. query error unit 'quarter' not supported for type time
  680. SELECT EXTRACT(QUARTER from TIME '11:12:42.666')
  681. query error unit 'month' not supported for type time
  682. SELECT EXTRACT(MONTH from TIME '11:12:42.666')
  683. query error unit 'week' not supported for type time
  684. SELECT EXTRACT(WEEK from TIME '11:12:42.666')
  685. query error unit 'day' not supported for type time
  686. SELECT EXTRACT(DAY from TIME '11:12:42.666')
  687. query error unit 'dow' not supported for type time
  688. SELECT EXTRACT(DOW from TIME '11:12:42.666')
  689. query error unit 'doy' not supported for type time
  690. SELECT EXTRACT(DOY from TIME '11:12:42.666')
  691. query error unit 'isodow' not supported for type time
  692. SELECT EXTRACT(ISODOW from TIME '11:12:42.666')
  693. query error unit 'isodoy' not supported for type time
  694. SELECT EXTRACT(ISODOY from TIME '11:12:42.666')
  695. query error unit 'month' not supported for type time
  696. SELECT date_part('MONTH', TIME '11:12:42.666')
  697. query RR
  698. SELECT EXTRACT(DOW FROM TIMESTAMP '1999-12-26 00:00:00'), EXTRACT(DOW FROM TIMESTAMP '2000-01-01 00:00:00')
  699. ----
  700. 0 6
  701. query RR
  702. SELECT EXTRACT(ISODOW FROM TIMESTAMP '1999-12-26 00:00:00'), EXTRACT(ISODOW FROM TIMESTAMP '2000-01-01 00:00:00')
  703. ----
  704. 7 6
  705. query RRRRRRRRRRRRRRRRR
  706. SELECT EXTRACT(EPOCH FROM TIMESTAMP '2019-11-26 15:56:46.241150'),
  707. EXTRACT(MILLENNIUM FROM TIMESTAMP '2019-11-26 15:56:46.241150'),
  708. EXTRACT(CENTURY FROM TIMESTAMP '2019-11-26 15:56:46.241150'),
  709. EXTRACT(DECADE FROM TIMESTAMP '2019-11-26 15:56:46.241150'),
  710. EXTRACT(YEAR FROM TIMESTAMP '2019-11-26 15:56:46.241150'),
  711. EXTRACT(QUARTER FROM TIMESTAMP '2019-11-26 15:56:46.241150'),
  712. EXTRACT(WEEK FROM TIMESTAMP '2019-11-26 15:56:46.241150'),
  713. EXTRACT(MONTH FROM TIMESTAMP '2019-11-26 15:56:46.241150'),
  714. EXTRACT(HOUR FROM TIMESTAMP '2019-11-26 15:56:46.241150'),
  715. EXTRACT(DAY FROM TIMESTAMP '2019-11-26 15:56:46.241150'),
  716. EXTRACT(DOW FROM TIMESTAMP '2019-11-26 15:56:46.241150'),
  717. EXTRACT(DOY FROM TIMESTAMP '2019-11-26 15:56:46.241150'),
  718. EXTRACT(ISODOW FROM TIMESTAMP '2019-11-26 15:56:46.241150'),
  719. EXTRACT(MINUTE FROM TIMESTAMP '2019-11-26 15:56:46.241150'),
  720. EXTRACT(SECOND FROM TIMESTAMP '2019-11-26 15:56:46.241150'),
  721. EXTRACT(MS FROM TIMESTAMP '2019-11-26 15:56:46.241150'),
  722. EXTRACT(US FROM TIMESTAMP '2019-11-26 15:56:46.241150')
  723. ----
  724. 1574783806.24115 3 21 201 2019 4 48 11 15 26 2 330 2 56 46.24115 46241.15 46241150
  725. query RRRRRRRRRRRRRRRRR
  726. SELECT date_part('EPOCH', TIMESTAMP '2019-11-26 15:56:46.241150'),
  727. date_part('MILLENNIUM', TIMESTAMP '2019-11-26 15:56:46.241150'),
  728. date_part('CENTURY', TIMESTAMP '2019-11-26 15:56:46.241150'),
  729. date_part('DECADE', TIMESTAMP '2019-11-26 15:56:46.241150'),
  730. date_part('YEAR', TIMESTAMP '2019-11-26 15:56:46.241150'),
  731. date_part('QUARTER', TIMESTAMP '2019-11-26 15:56:46.241150'),
  732. date_part('WEEK', TIMESTAMP '2019-11-26 15:56:46.241150'),
  733. date_part('MONTH', TIMESTAMP '2019-11-26 15:56:46.241150'),
  734. date_part('HOUR', TIMESTAMP '2019-11-26 15:56:46.241150'),
  735. date_part('DAY', TIMESTAMP '2019-11-26 15:56:46.241150'),
  736. date_part('DOW', TIMESTAMP '2019-11-26 15:56:46.241150'),
  737. date_part('DOY', TIMESTAMP '2019-11-26 15:56:46.241150'),
  738. date_part('ISODOW', TIMESTAMP '2019-11-26 15:56:46.241150'),
  739. date_part('MINUTE', TIMESTAMP '2019-11-26 15:56:46.241150'),
  740. date_part('SECOND', TIMESTAMP '2019-11-26 15:56:46.241150'),
  741. date_part('MS', TIMESTAMP '2019-11-26 15:56:46.241150'),
  742. date_part('US', TIMESTAMP '2019-11-26 15:56:46.241150')
  743. ----
  744. 1574783806.24115 3 21 201 2019 4 48 11 15 26 2 330 2 56 46.24115 46241.15 46241150
  745. query RRRRRRRRRRRR
  746. SELECT EXTRACT(QUARTER FROM DATE '2000-01-01'),
  747. EXTRACT(QUARTER FROM DATE '2000-02-03'),
  748. EXTRACT(QUARTER FROM DATE '2000-03-05'),
  749. EXTRACT(QUARTER FROM DATE '2000-04-07'),
  750. EXTRACT(QUARTER FROM DATE '2000-05-09'),
  751. EXTRACT(QUARTER FROM DATE '2000-06-11'),
  752. EXTRACT(QUARTER FROM DATE '2000-07-13'),
  753. EXTRACT(QUARTER FROM DATE '2000-08-15'),
  754. EXTRACT(QUARTER FROM DATE '2000-09-17'),
  755. EXTRACT(QUARTER FROM DATE '2000-10-19'),
  756. EXTRACT(QUARTER FROM DATE '2000-11-21'),
  757. EXTRACT(QUARTER FROM DATE '2000-12-24')
  758. ----
  759. 1 1 1 2 2 2 3 3 3 4 4 4
  760. query RRRRRRRR
  761. SELECT EXTRACT(MILLENNIUM FROM DATE '2001-01-01'),
  762. EXTRACT(MILLENNIUM FROM DATE '2000-01-01'),
  763. EXTRACT(MILLENNIUM FROM DATE '1999-01-01'),
  764. EXTRACT(MILLENNIUM FROM DATE '1001-01-01'),
  765. EXTRACT(MILLENNIUM FROM DATE '1000-01-01'),
  766. EXTRACT(MILLENNIUM FROM DATE '0001-01-01'),
  767. EXTRACT(MILLENNIUM FROM DATE '0001-01-01' - INTERVAL '1'SECOND),
  768. EXTRACT(MILLENNIUM FROM DATE '0001-01-01' - INTERVAL '1000 YEAR 1 SECOND')
  769. ----
  770. 3 2 2 2 1 1 -1 -2
  771. query RRRRRRRR
  772. SELECT EXTRACT(CENTURY FROM DATE '2001-01-01'),
  773. EXTRACT(CENTURY FROM DATE '2000-01-01'),
  774. EXTRACT(CENTURY FROM DATE '1999-01-01'),
  775. EXTRACT(CENTURY FROM DATE '1001-01-01'),
  776. EXTRACT(CENTURY FROM DATE '1000-01-01'),
  777. EXTRACT(CENTURY FROM DATE '0001-01-01'),
  778. EXTRACT(CENTURY FROM DATE '0001-01-01' - INTERVAL '1'SECOND),
  779. EXTRACT(CENTURY FROM DATE '0001-01-01' - INTERVAL '100 YEAR 1 SECOND')
  780. ----
  781. 21 20 20 11 10 1 -1 -2
  782. query RRRRRRRR
  783. SELECT EXTRACT(DECADE FROM DATE '2001-01-01'),
  784. EXTRACT(DECADE FROM DATE '2000-01-01'),
  785. EXTRACT(DECADE FROM DATE '1999-01-01'),
  786. EXTRACT(DECADE FROM DATE '0001-01-01'),
  787. EXTRACT(DECADE FROM DATE '0001-01-01' - INTERVAL '1'SECOND),
  788. EXTRACT(DECADE FROM DATE '0001-01-01' - INTERVAL '1 YEAR 1 SECOND'),
  789. EXTRACT(DECADE FROM DATE '0001-01-01' - INTERVAL '10 YEAR 1 SECOND'),
  790. EXTRACT(DECADE FROM DATE '0001-01-01' - INTERVAL '11 YEAR 1 SECOND')
  791. ----
  792. 200 200 199 0 0 -1 -1 -2
  793. query RR
  794. SELECT EXTRACT(WEEK FROM DATE '2000-01-01'), EXTRACT(WEEK FROM DATE '2000-01-08')
  795. ----
  796. 52 1
  797. query RR
  798. SELECT EXTRACT(DOY FROM DATE '2000-01-01'), EXTRACT(DOY FROM DATE '2000-12-31')
  799. ----
  800. 1 366
  801. query error unit 'hour' not supported for type date
  802. SELECT EXTRACT(HOUR FROM DATE '2000-12-31')
  803. query error unit 'seconds' not supported for type date
  804. SELECT EXTRACT(SECOND FROM DATE '2000-12-31')
  805. query error unit 'milliseconds' not supported for type date
  806. SELECT EXTRACT(MILLISECOND FROM DATE '2000-12-31')
  807. query error unit 'microseconds' not supported for type date
  808. SELECT EXTRACT(MICROSECOND FROM DATE '2000-12-31')
  809. query RRRR
  810. SELECT date_part('HOUR', DATE '2000-12-31'),
  811. date_part('SECOND', DATE '2000-12-31'),
  812. date_part('MILLISECOND', DATE '2000-12-31'),
  813. date_part('MICROSECOND', DATE '2000-12-31')
  814. ----
  815. 0 0 0 0
  816. query RR
  817. SELECT EXTRACT(EPOCH from INTERVAL '-1' MINUTE), EXTRACT(MINUTE from INTERVAL '-1' MINUTE)
  818. ----
  819. -60 -1
  820. query RR
  821. SELECT EXTRACT(EPOCH from INTERVAL '1' YEAR), EXTRACT(EPOCH from INTERVAL '1' MONTH) * 12
  822. ----
  823. 31557600 31104000
  824. query RR
  825. SELECT EXTRACT(MILLISECOND from INTERVAL '72.345678'SECOND), EXTRACT(MICROSECOND from INTERVAL '72.345678'SECOND)
  826. ----
  827. 12345.678 12345678
  828. query RRR
  829. SELECT EXTRACT(DECADE from INTERVAL '39'YEAR),
  830. EXTRACT(CENTURY from INTERVAL '399'YEAR),
  831. EXTRACT(MILLENNIUM from INTERVAL '3999'YEAR)
  832. ----
  833. 3 3 3
  834. query RR
  835. SELECT EXTRACT(MONTH from INTERVAL '-13'MONTH), EXTRACT(MONTH from INTERVAL '15'MONTH)
  836. ----
  837. -1 3
  838. query RRRRRRRRRRR
  839. SELECT date_part('EPOCH', INTERVAL '-1' MINUTE),
  840. date_part('MINUTE', INTERVAL '-1' MINUTE),
  841. date_part('EPOCH', INTERVAL '1' YEAR),
  842. date_part('EPOCH', INTERVAL '1' MONTH) * 12,
  843. date_part('MILLISECOND', INTERVAL '72.345678'SECOND),
  844. date_part('MICROSECOND', INTERVAL '72.345678'SECOND),
  845. date_part('DECADE', INTERVAL '39'YEAR),
  846. date_part('CENTURY', INTERVAL '399'YEAR),
  847. date_part('MILLENNIUM', INTERVAL '3999'YEAR),
  848. date_part('MONTH', INTERVAL '-13'MONTH),
  849. date_part('MONTH', INTERVAL '15'MONTH)
  850. ----
  851. -60 -1 31557600 31104000 12345.678 12345678 3 3 3 -1 3
  852. query T
  853. SELECT to_char(TIMESTAMPTZ '1997-02-03 11:12:59.9', 'YYYY-MM-DD HH24:MI:SS.MS TZ')
  854. ----
  855. 1997-02-03 11:12:59.900 UTC
  856. # Test that fractional milliseconds are not rounded, which matches Postgres's
  857. # behavior.
  858. query T
  859. SELECT to_char(TIMESTAMPTZ '1997-02-03 11:12:59.7777', 'YYYY-MM-DD HH24:MI:SS.MS TZ')
  860. ----
  861. 1997-02-03 11:12:59.777 UTC
  862. # Test a degenerate pattern that contains no field specifiers.
  863. query T
  864. SELECT to_char(TIMESTAMP '2000-01-01', 'no patterns at all')
  865. ----
  866. no patterns at all
  867. query T
  868. SELECT to_timestamp(-1)
  869. ----
  870. 1969-12-31 23:59:59+00
  871. query T
  872. SELECT to_timestamp(0)
  873. ----
  874. 1970-01-01 00:00:00+00
  875. query T
  876. SELECT to_timestamp(946684800)
  877. ----
  878. 2000-01-01 00:00:00+00
  879. query T
  880. SELECT to_timestamp(1262349296.7890123)
  881. ----
  882. 2010-01-01 12:34:56.789012+00
  883. query T
  884. SELECT to_timestamp(1.999999999)
  885. ----
  886. 1970-01-01 00:00:02+00
  887. query error timestamp out of range
  888. SELECT to_timestamp('inf'::double)
  889. query error timestamp cannot be NaN
  890. SELECT to_timestamp('nan'::double)
  891. # Negative timestamps are not allowed
  892. statement error
  893. SELECT TIMESTAMP '-2000-01-01 1:2:3';
  894. statement error
  895. SELECT DATE '-2000-01-01';
  896. statement error
  897. SELECT TIMESTAMP '-2000-01 1:2:3';
  898. statement error
  899. SELECT DATE '-2000-01 1:2:3';
  900. # Test string to datetime types
  901. query T
  902. SELECT '2007-02-01'::date
  903. ----
  904. 2007-02-01
  905. query T
  906. SELECT '-1-2 3 -4:5:6.7'::interval;
  907. ----
  908. -1 years -2 months +3 days -04:05:06.7
  909. query T
  910. SELECT '01:23:45'::time;
  911. ----
  912. 01:23:45
  913. query T
  914. SELECT '2007-02-01 15:04:05'::timestamp;
  915. ----
  916. 2007-02-01 15:04:05
  917. query T
  918. SELECT '2007-02-01 15:04:05+06'::timestamptz;
  919. ----
  920. 2007-02-01 09:04:05+00
  921. # Test datetime types to string
  922. query T
  923. SELECT (date '2007-02-01')::text
  924. ----
  925. 2007-02-01
  926. query T
  927. SELECT (interval '-1-2 3 -4:5:6.7')::text;
  928. ----
  929. -1 years -2 months +3 days -04:05:06.7
  930. query T
  931. SELECT (time '01:23:45')::text;
  932. ----
  933. 01:23:45
  934. query T
  935. SELECT (timestamp '2007-02-01 15:04:05')::text;
  936. ----
  937. 2007-02-01 15:04:05
  938. query T
  939. SELECT (timestamptz '2007-02-01 15:04:05+06')::text;
  940. ----
  941. 2007-02-01 09:04:05+00
  942. # Test special date-timme inputs from Postgres
  943. query T
  944. SELECT 'epoch'::timestamp
  945. ----
  946. 1970-01-01 00:00:00
  947. query T
  948. SELECT 'epoch'::timestamptz
  949. ----
  950. 1970-01-01 00:00:00+00
  951. query T
  952. SELECT 'epoch'::date
  953. ----
  954. 1970-01-01
  955. # Test ISO-formatted timestamps
  956. query T
  957. SELECT TIMESTAMP '2007-02-01T15:04:05'
  958. ----
  959. 2007-02-01 15:04:05
  960. query T
  961. SELECT TIMESTAMPTZ '2007-02-01T15:04:05+00'
  962. ----
  963. 2007-02-01 15:04:05+00
  964. query T
  965. SELECT TIMESTAMPTZ '20070201 T 15:04:05+00';
  966. ----
  967. 2007-02-01 15:04:05+00
  968. query T
  969. SELECT TIMESTAMPTZ '20070201T15:04:05+00';
  970. ----
  971. 2007-02-01 15:04:05+00
  972. query T
  973. SELECT DATE '2007-02-01T15:04:05+00'
  974. ----
  975. 2007-02-01
  976. query T
  977. SELECT DATE '2007-02-01 T 15:04:05+00'
  978. ----
  979. 2007-02-01
  980. query T
  981. SELECT DATE '2007-02-01 T 15:04:05+00'
  982. ----
  983. 2007-02-01
  984. statement error invalid input syntax for type date: unknown units X: "2007-02-01X15:04:05"
  985. SELECT DATE '2007-02-01X15:04:05'
  986. statement error invalid input syntax for type date: unknown units TT: "2007-02-01TT15:04:05"
  987. SELECT DATE '2007-02-01TT15:04:05'
  988. statement error invalid input syntax for type date: Cannot determine format of all parts: "2007-02-01 T T 15:04:05"
  989. SELECT DATE '2007-02-01 T T 15:04:05'
  990. statement error invalid input syntax for type date: Invalid timezone string \(T\): 'T' is not a valid timezone. Failed to parse T at token index 0
  991. SELECT DATE '2007-02-01 T '
  992. # Test casting time to interval & vice versa
  993. query T
  994. SELECT time '01:02:03.04'::interval;
  995. ----
  996. 01:02:03.04
  997. query T
  998. SELECT interval '01:02:03.04'::time;
  999. ----
  1000. 01:02:03.04
  1001. query T
  1002. SELECT interval '-01:02:03.04'::time;
  1003. ----
  1004. 22:57:56.96
  1005. query T
  1006. SELECT interval '-3 days -2 hours'::time;
  1007. ----
  1008. 22:00:00
  1009. # Test using date as a column name.
  1010. query T
  1011. SELECT date FROM (SELECT column1 AS date FROM (VALUES ('2020-01-01')))
  1012. ----
  1013. 2020-01-01
  1014. # Arbitrary punctuation as delimiter
  1015. query T
  1016. SELECT '"2020-03-17 ~02:36:56~"'::timestamp;
  1017. ----
  1018. 2020-03-17 02:36:56
  1019. query T
  1020. SELECT '"2020!03-17 #?~T~02:36:56#"'::timestamp;
  1021. ----
  1022. 2020-03-17 02:36:56
  1023. query T
  1024. SELECT '"2020!03-17 #?~T~02:36:56#+00"'::timestamp;
  1025. ----
  1026. 2020-03-17 02:36:56
  1027. query error invalid input syntax for type timestamp: have unprocessed tokens 56
  1028. select TIMESTAMP '"2020-03-17 ~02:36:~56~"';
  1029. query T
  1030. SELECT '"2020!03-17 #?~T~02:36:56#+00~"'::timestamp with time zone;
  1031. ----
  1032. 2020-03-17 02:36:56+00
  1033. query T
  1034. SELECT '"2020!03-17 #?~T~02:36:56# + 00 '::timestamp with time zone;
  1035. ----
  1036. 2020-03-17 02:36:56+00
  1037. query T
  1038. SELECT '"2020!03-17 #?~T~02:36:56# + 00 ? '::timestamp with time zone;
  1039. ----
  1040. 2020-03-17 02:36:56+00
  1041. query T
  1042. SELECT '"2020!03-17 #?~T~02:36:56# # + 00 ? '::timestamp with time zone;
  1043. ----
  1044. 2020-03-17 02:36:56+00
  1045. query T
  1046. SELECT '"2020!03-17 #?~T~02:36:56# # + 00 ?#'::timestamp with time zone;
  1047. ----
  1048. 2020-03-17 02:36:56+00
  1049. query T
  1050. SELECT '\"\"2024-02-13 17:01:58.37848+00\"\"\"'::timestamp with time zone;
  1051. ----
  1052. 2024-02-13 17:01:58.37848+00
  1053. # : is not prohibited
  1054. query T
  1055. SELECT '"?!?2024-02-13 17:01:58.37848 ?+ 00 : '::timestamp with time zone;
  1056. ----
  1057. 2024-02-13 17:01:58.37848+00
  1058. # + is prohibited after numerals
  1059. query error invalid input syntax for type timestamp with time zone: have unprocessed tokens \+ 0: "\\"\?!\?2024\-02\-13 17:01:58\.37848 \?\+ 00 \+ "
  1060. SELECT '"?!?2024-02-13 17:01:58.37848 ?+ 00 + '::timestamp with time zone;
  1061. # - is prohibited after numerals
  1062. query error invalid input syntax for type timestamp with time zone: have unprocessed tokens \+ 0: "\\"\?!\?2024\-02\-13 17:01:58\.37848 \?\+ 00 \- "
  1063. SELECT '"?!?2024-02-13 17:01:58.37848 ?+ 00 - '::timestamp with time zone;
  1064. # no space between numerals
  1065. query error invalid input syntax for type timestamp with time zone: Cannot parse timezone offset \+ 0 0: "\\"\?!\?2024\-02\-13 17:01:58\.37848\+ 0 0"
  1066. SELECT '"?!?2024-02-13 17:01:58.37848+ 0 0'::timestamp with time zone;
  1067. # no non-space characters between + or - and the numerals
  1068. query error invalid input syntax for type timestamp with time zone: Cannot parse timezone offset \+ \? 00: "\\"\?!\?2024\-02\-13 17:01:58\.37848\+ \? 00"
  1069. SELECT '"?!?2024-02-13 17:01:58.37848+ ? 00'::timestamp with time zone;
  1070. # Regression for database-issues#1933. These match postgres.
  1071. query TTT
  1072. select '9::60'::time, '9:59:60'::time, '9::59.999999'::time
  1073. ----
  1074. 09:01:00 10:00:00 09:00:59.999999
  1075. # TODO: Postgres returns 09:01:00 for this.
  1076. query T
  1077. select '9::59.999999999'::time
  1078. ----
  1079. 09:00:59.999999
  1080. # TODO: Postgres supports this as 09:01:00.1.
  1081. statement error invalid input syntax for type time: NANOSECOND
  1082. select '9::60.1'::time
  1083. # BC years are properly formatted
  1084. # Using INTERVAL to work around the parser not supporting BC identifiers yet
  1085. query T
  1086. select '0001-02-24'::date - interval '1 YEAR'
  1087. ----
  1088. 0001-02-24 00:00:00 BC
  1089. query T
  1090. select ('0001-02-24'::date - interval '1 YEAR')::date
  1091. ----
  1092. 0001-02-24 BC
  1093. query T
  1094. select ('0001-01-01'::date - interval '1 DAY')::date
  1095. ----
  1096. 0001-12-31 BC
  1097. query error "-2147483648" interval out of range
  1098. select '0001-02-24'::date - interval '-2147483648 MONTHS'
  1099. query T
  1100. select '0001-02-24 03:04:05'::timestamp - interval '1 YEAR'
  1101. ----
  1102. 0001-02-24 03:04:05 BC
  1103. query T
  1104. select '0001-02-24 03:04:05.6789'::timestamp - interval '1 YEAR'
  1105. ----
  1106. 0001-02-24 03:04:05.6789 BC
  1107. query T
  1108. select '0001-02-24 03:04:05.6789 +00:00'::timestamptz - interval '1 YEAR'
  1109. ----
  1110. 0001-02-24 03:04:05.6789+00 BC
  1111. query error "-178956970 years -8 months" interval out of range
  1112. select '0001-02-24 03:04:05.6789'::timestamp - interval '-2147483648 MONTHS'
  1113. query error "-178956970 years -8 months" interval out of range
  1114. select '0001-02-24 03:04:05.6789 +00:00'::timestamptz - interval '-2147483648 MONTHS'
  1115. # Infinity dates not supported.
  1116. query error invalid input syntax for type date
  1117. select 'infinity'::date
  1118. # We don't support BC parsing or 6 digit dates, so do some jank. Additionally,
  1119. # we don't yet support the `date - int` operation and have to use `date -
  1120. # interval` instead, which produces a `timestamp`, and thus we aren't able to even
  1121. # express the full range of date values.
  1122. # Lowest date we could support, but timestamps don't.
  1123. # select ('0001-01-01'::date - '4713years 1months 7days')::date
  1124. query T
  1125. select ('0001-01-01'::date - '1721389days'::interval)::date
  1126. ----
  1127. 4714-12-31 BC
  1128. query T
  1129. select ('0001-01-01'::date + '262141years 11months 30days'::interval)::date
  1130. ----
  1131. 262142-12-31
  1132. # Out of range for both dates and timestamps, but timestamp triggers first.
  1133. query error timestamp out of range
  1134. select ('0001-01-01'::date - '4713years 1months 8days')::date
  1135. query error timestamp out of range
  1136. select ('0001-01-01'::date + '262141years 11months 30days')::date + '1day'
  1137. query II
  1138. select ('0001-01-01'::date - '1721389days'::interval)::date - ('0001-01-01'::date + '262141years 11months 30days'::interval)::date, ('0001-01-01'::date + '262141years 11months 30days'::interval)::date - ('0001-01-01'::date - '1721389days'::interval)::date
  1139. ----
  1140. -97466787 97466787
  1141. query error timestamp out of range
  1142. SELECT to_timestamp(9223372036854775808::float8);
  1143. query error timestamp out of range
  1144. SELECT to_timestamp(-9223372036854775809::float8);
  1145. # Negative fractional timestamp
  1146. query T
  1147. SELECT to_timestamp(-0.1::float8);
  1148. ----
  1149. 1969-12-31 23:59:59.9+00
  1150. # Regression test for https://github.com/MaterializeInc/database-issues/issues/6002
  1151. query T
  1152. SELECT now() + null;
  1153. ----
  1154. NULL
  1155. # Test timestamp precision.
  1156. query error precision for type timestamp or timestamptz must be between 0 and 6
  1157. SELECT '1970-01-01T00:00:00.666666'::timestamp(-1);
  1158. query error precision for type timestamp or timestamptz must be between 0 and 6
  1159. SELECT '1970-01-01T00:00:00.666666'::timestamp(7);
  1160. query T
  1161. SELECT '1970-01-01T00:00:00.666666666'::timestamp(0);
  1162. ----
  1163. 1970-01-01 00:00:01
  1164. query T
  1165. SELECT '1970-01-01T00:00:00.666666666'::timestamp(1);
  1166. ----
  1167. 1970-01-01 00:00:00.7
  1168. query T
  1169. SELECT '1970-01-01T00:00:00.666666666'::timestamp(2);
  1170. ----
  1171. 1970-01-01 00:00:00.67
  1172. query T
  1173. SELECT '1970-01-01T00:00:00.666666666'::timestamp(3);
  1174. ----
  1175. 1970-01-01 00:00:00.667
  1176. query T
  1177. SELECT '1970-01-01T00:00:00.666666666'::timestamp(4);
  1178. ----
  1179. 1970-01-01 00:00:00.6667
  1180. query T
  1181. SELECT '1970-01-01T00:00:00.666666666'::timestamp(5);
  1182. ----
  1183. 1970-01-01 00:00:00.66667
  1184. query T
  1185. SELECT '1970-01-01T00:00:00.666666666'::timestamp(6);
  1186. ----
  1187. 1970-01-01 00:00:00.666667
  1188. query T
  1189. SELECT '1970-01-01T00:00:00.666666666'::timestamptz(0);
  1190. ----
  1191. 1970-01-01 00:00:01+00
  1192. query T
  1193. SELECT '1970-01-01T00:00:00.666666666'::timestamptz(1);
  1194. ----
  1195. 1970-01-01 00:00:00.7+00
  1196. query T
  1197. SELECT '1970-01-01T00:00:00.666666666'::timestamptz(2);
  1198. ----
  1199. 1970-01-01 00:00:00.67+00
  1200. query T
  1201. SELECT '1970-01-01T00:00:00.666666666'::timestamptz(3);
  1202. ----
  1203. 1970-01-01 00:00:00.667+00
  1204. query T
  1205. SELECT '1970-01-01T00:00:00.666666666'::timestamptz(4);
  1206. ----
  1207. 1970-01-01 00:00:00.6667+00
  1208. query T
  1209. SELECT '1970-01-01T00:00:00.666666666'::timestamptz(5);
  1210. ----
  1211. 1970-01-01 00:00:00.66667+00
  1212. query T
  1213. SELECT '1970-01-01T00:00:00.666666666'::timestamptz(6);
  1214. ----
  1215. 1970-01-01 00:00:00.666667+00
  1216. query T
  1217. SELECT '1970-01-01T00:00:00.666666666'::timestamp::timestamp(3);
  1218. ----
  1219. 1970-01-01 00:00:00.667
  1220. query T
  1221. SELECT '1970-01-01T00:00:00.666666666'::timestamptz::timestamptz(3);
  1222. ----
  1223. 1970-01-01 00:00:00.667+00
  1224. query T
  1225. SELECT '1970-01-01T00:00:00.666666666'::timestamp::timestamptz(3);
  1226. ----
  1227. 1970-01-01 00:00:00.667+00
  1228. query T
  1229. SELECT '1970-01-01T00:00:00.666666666'::timestamptz::timestamp(3);
  1230. ----
  1231. 1970-01-01 00:00:00.667
  1232. query T
  1233. SELECT '1970-01-01T00:00:00.666666666'::date::timestamptz(3);
  1234. ----
  1235. 1970-01-01 00:00:00+00
  1236. query T
  1237. SELECT '1970-01-01T00:00:00.666666666'::date::timestamp(3);
  1238. ----
  1239. 1970-01-01 00:00:00
  1240. query T
  1241. SELECT '1970-01-01T00:00:00.123456789'::timestamp(6) - '1970-01-01T00:00:00.123456789'::timestamp(3);
  1242. ----
  1243. 00:00:00.000457
  1244. query T
  1245. SELECT '1970-01-01T00:00:00.123456789'::timestamptz(6) - '1970-01-01T00:00:00.123456789'::timestamptz(3);
  1246. ----
  1247. 00:00:00.000457
  1248. query T
  1249. SELECT date_bin('5 microseconds'::interval, '1970-01-01T00:00:00.123456789'::timestamp(6), '1970-01-01T00:00:00.123456789'::timestamp(3));
  1250. ----
  1251. 1970-01-01 00:00:00.123455
  1252. query T
  1253. SELECT date_bin('5 milliseconds'::interval, '1970-01-01T00:00:00.123456789'::timestamptz(6), '1970-01-01T00:00:00.123456789'::timestamptz(3));
  1254. ----
  1255. 1970-01-01 00:00:00.123+00
  1256. query T
  1257. SELECT age('1970-01-01T00:00:00.123456789'::timestamp(6), '1970-01-01T00:00:00.123456789'::timestamp(3));
  1258. ----
  1259. 00:00:00.000457
  1260. query T
  1261. SELECT age('1970-01-01T00:00:00.123456789'::timestamptz(3), '1970-01-01T00:00:00.123456789'::timestamptz(0));
  1262. ----
  1263. 00:00:00.123
  1264. query T
  1265. SELECT timestamptz(0) '95143-12-31 23:59:59.123456789+06';
  1266. ----
  1267. 95143-12-31 17:59:59+00
  1268. query T
  1269. SELECT timestamp(0) with time zone '95143-12-31 23:59:59.123456789';
  1270. ----
  1271. 95143-12-31 23:59:59+00
  1272. query T
  1273. SELECT timestamp(0) without time zone '95143-12-31 23:59:59.123456789+06';
  1274. ----
  1275. 95143-12-31 23:59:59
  1276. query T
  1277. SELECT timestamptz '95141-12-31 23:59:59.123456789+06';
  1278. ----
  1279. 95141-12-31 17:59:59.123457+00
  1280. query T
  1281. SELECT timestamp(0) '95143-12-31 23:59:59.123456789+06';
  1282. ----
  1283. 95143-12-31 23:59:59
  1284. query T
  1285. SELECT timestamp '95143-12-31 23:59:59.123456789+06';
  1286. ----
  1287. 95143-12-31 23:59:59.123457
  1288. query B
  1289. SELECT timestamptz(0) '95143-12-31 23:59:59+06' = timestamptz(0) '95143-12-31 23:59:59.123456789+06';
  1290. ----
  1291. true
  1292. query B
  1293. SELECT timestamptz '95143-12-31 23:59:59.123456789+06' = timestamptz(6) '95143-12-31 23:59:59.123456789+06';
  1294. ----
  1295. true
  1296. query B
  1297. SELECT timestamp(0) '95143-12-31 17:59:59.123+00' = timestamp(0) '95143-12-31 17:59:59.123456789+00';
  1298. ----
  1299. true
  1300. query B
  1301. SELECT timestamp '95143-12-31 17:59:59.123456789+00' = timestamp(6) '95143-12-31 17:59:59.123456789+00';
  1302. ----
  1303. true
  1304. query B
  1305. SELECT timestamp(5) '95143-12-31 17:59:59.1235+00' = timestamp(4) '95143-12-31 17:59:59.123456789+00';
  1306. ----
  1307. true
  1308. query error precision for type timestamp or timestamptz must be between 0 and 6
  1309. SELECT timestamp(-1) '95143-12-31 23:59:59.123456789+06';
  1310. query error precision for type timestamp or timestamptz must be between 0 and 6
  1311. SELECT timestamp(-1) with time zone '95143-12-31 23:59:59.123456789+06';
  1312. query error precision for type timestamp or timestamptz must be between 0 and 6
  1313. SELECT '95143-12-31 23:59:59.123456789+06'::timestamp(-1);
  1314. query error precision for type timestamp or timestamptz must be between 0 and 6
  1315. SELECT timestamptz(-1) '95143-12-31 23:59:59.123456789+06';
  1316. # Note: we regressed the error messages for the following
  1317. # See <https://github.com/MaterializeInc/incidents-and-escalations/issues/90>
  1318. query error Expected end of statement
  1319. SELECT timestamp(10000000000000000000) '95143-12-31 23:59:59.123456789+06';
  1320. query error Expected end of statement
  1321. SELECT timestamptz(10000000000000000000) '95143-12-31 23:59:59.123456789+06';
  1322. query error Expected end of statement
  1323. SELECT timestamp(9223372036854775808) '95143-12-31 23:59:59.123456789+06';
  1324. # checking we are not converting between the same precision again
  1325. query T multiline
  1326. EXPLAIN RAW PLAN FOR
  1327. SELECT '95143-12-31 23:59:59.123456789+06'::timestamptz(3)::timestamptz(3);
  1328. ----
  1329. Map (text_to_timestamp_with_time_zone("95143-12-31 23:59:59.123456789+06"))
  1330. Constant
  1331. - ()
  1332. Target cluster: quickstart
  1333. EOF
  1334. query T multiline
  1335. EXPLAIN RAW PLAN FOR
  1336. SELECT timestamp(3) '95143-12-31 23:59:59.123456789+06'::timestamp(3);
  1337. ----
  1338. Map (text_to_timestamp("95143-12-31 23:59:59.123456789+06"))
  1339. Constant
  1340. - ()
  1341. Target cluster: quickstart
  1342. EOF
  1343. query T multiline
  1344. EXPLAIN RAW PLAN FOR
  1345. SELECT timestamp(3) '95143-12-31 23:59:59.123456789+06'::timestamp(6);
  1346. ----
  1347. Map (adjust_timestamp_precision(text_to_timestamp("95143-12-31 23:59:59.123456789+06")))
  1348. Constant
  1349. - ()
  1350. Target cluster: quickstart
  1351. EOF
  1352. statement ok
  1353. CREATE table t (timestamp string);
  1354. statement ok
  1355. INSERT INTO t VALUES('2012-03-05');
  1356. query T
  1357. SELECT * from t ORDER BY timestamp;
  1358. ----
  1359. 2012-03-05
  1360. query T
  1361. SELECT * from t ORDER BY t.timestamp;
  1362. ----
  1363. 2012-03-05
  1364. query T
  1365. SELECT timestamp::timestamp from t ORDER BY t.timestamp;
  1366. ----
  1367. 2012-03-05 00:00:00