datetime.slt 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404
  1. # Copyright 2015 - 2019 The Cockroach Authors. All rights reserved.
  2. # Copyright Materialize, Inc. and contributors. All rights reserved.
  3. #
  4. # Use of this software is governed by the Business Source License
  5. # included in the LICENSE file at the root of this repository.
  6. #
  7. # As of the Change Date specified in that file, in accordance with
  8. # the Business Source License, use of this software will be governed
  9. # by the Apache License, Version 2.0.
  10. #
  11. # This file is derived from the logic test suite in CockroachDB. The
  12. # original file was retrieved on June 10, 2019 from:
  13. #
  14. # https://github.com/cockroachdb/cockroach/blob/d2f7fbf5dd1fc1a099bbad790a2e1f7c60a66cc3/pkg/sql/logictest/testdata/logic_test/datetime
  15. #
  16. # The original source code is subject to the terms of the Apache
  17. # 2.0 license, a copy of which can be found in the LICENSE file at the
  18. # root of this repository.
  19. mode cockroach
  20. simple conn=mz_system,user=mz_system
  21. ALTER SYSTEM SET unsafe_enable_table_keys = true
  22. ----
  23. COMPLETE 0
  24. statement ok
  25. CREATE TABLE t (
  26. a TIMESTAMP PRIMARY KEY,
  27. b DATE,
  28. c INTERVAL,
  29. UNIQUE (b),
  30. UNIQUE (c),
  31. FAMILY (a),
  32. FAMILY (b),
  33. FAMILY (c)
  34. )
  35. statement ok
  36. INSERT INTO t VALUES
  37. ('2015-08-30 03:34:45.34567', '2015-08-30', '34h2s'),
  38. ('2015-08-25 04:45:45.53453', '2015-08-25', '2h45m2s234ms'),
  39. ('2015-08-29 23:10:09.98763', '2015-08-29', '234h45m2s234ms')
  40. # Spot-check date math.
  41. query T
  42. SELECT b + '6 month' from t order by a desc
  43. ----
  44. 2016-02-29 00:00:00 +0000 UTC
  45. 2016-02-29 00:00:00 +0000 UTC
  46. 2016-02-25 00:00:00 +0000 UTC
  47. query TTT
  48. SELECT * FROM t WHERE a = '2015-08-25 04:45:45.53453+01:00'::timestamp
  49. ----
  50. 2015-08-25 04:45:45.53453 +0000 +0000 2015-08-25 00:00:00 +0000 +0000 02:45:02.234
  51. # insert duplicate value with different time zone offset
  52. statement error duplicate key value \(a\)=\('2015-08-30 03:34:45\.34567\+00:00'\) violates unique constraint "primary"
  53. INSERT INTO t VALUES
  54. ('2015-08-30 03:34:45.34567-07:00', '2015-08-31', '35h2s')
  55. # Check that time/date/interval representations outside of the index are okay.
  56. statement ok
  57. CREATE TABLE u (
  58. a BIGINT PRIMARY KEY,
  59. b TIMESTAMP,
  60. c TIMESTAMPTZ,
  61. d DATE,
  62. e INTERVAL
  63. )
  64. statement ok
  65. INSERT INTO u VALUES
  66. (123, '2015-08-30 03:34:45.34567', '2015-08-30 03:34:45.34567', '2015-08-30', '34h2s'),
  67. (234, '2015-08-25 04:45:45.53453-02:00', '2015-08-25 04:45:45.53453-02:00', '2015-08-25', '2h45m2s234ms')
  68. statement ok
  69. SET TIME ZONE -5
  70. query TTT
  71. SELECT DATE '2000-01-01', DATE '2000-12-31', DATE '1993-05-16'
  72. ----
  73. 2000-01-01 00:00:00 +0000 +0000 2000-12-31 00:00:00 +0000 +0000 1993-05-16 00:00:00 +0000 +0000
  74. statement ok
  75. INSERT INTO u VALUES
  76. (345, '2015-08-29 23:10:09.98763', '2015-08-29 23:10:09.98763', '2015-08-29', '234h45m2s234ms'),
  77. (456, '2015-08-29 23:10:09.98763 UTC', '2015-08-29 23:10:09.98763 UTC', '2015-08-29', '234h45m2s234ms')
  78. query ITTTT
  79. SELECT * FROM u ORDER BY a
  80. ----
  81. 123 2015-08-30 03:34:45.34567 +0000 +0000 2015-08-29 22:34:45.34567 -0500 -0500 2015-08-30 00:00:00 +0000 +0000 34:00:02
  82. 234 2015-08-25 04:45:45.53453 +0000 +0000 2015-08-25 01:45:45.53453 -0500 -0500 2015-08-25 00:00:00 +0000 +0000 02:45:02.234
  83. 345 2015-08-29 23:10:09.98763 +0000 +0000 2015-08-29 23:10:09.98763 -0500 -0500 2015-08-29 00:00:00 +0000 +0000 234:45:02.234
  84. 456 2015-08-29 23:10:09.98763 +0000 +0000 2015-08-29 18:10:09.98763 -0500 -0500 2015-08-29 00:00:00 +0000 +0000 234:45:02.234
  85. statement ok
  86. SET TIME ZONE UTC
  87. query ITTTT
  88. SELECT * FROM u ORDER BY a
  89. ----
  90. 123 2015-08-30 03:34:45.34567 +0000 +0000 2015-08-30 03:34:45.34567 +0000 UTC 2015-08-30 00:00:00 +0000 +0000 34:00:02
  91. 234 2015-08-25 04:45:45.53453 +0000 +0000 2015-08-25 06:45:45.53453 +0000 UTC 2015-08-25 00:00:00 +0000 +0000 02:45:02.234
  92. 345 2015-08-29 23:10:09.98763 +0000 +0000 2015-08-30 04:10:09.98763 +0000 UTC 2015-08-29 00:00:00 +0000 +0000 234:45:02.234
  93. 456 2015-08-29 23:10:09.98763 +0000 +0000 2015-08-29 23:10:09.98763 +0000 UTC 2015-08-29 00:00:00 +0000 +0000 234:45:02.234
  94. statement ok
  95. SET TIME ZONE -5
  96. query TTTT
  97. SELECT max(b), max(c), max(d), max(e) FROM u
  98. ----
  99. 2015-08-30 03:34:45.34567 +0000 +0000 2015-08-29 23:10:09.98763 -0500 -0500 2015-08-30 00:00:00 +0000 +0000 234:45:02.234
  100. query TTTT
  101. SELECT min(b), min(c), min(d), min(e) FROM u
  102. ----
  103. 2015-08-25 04:45:45.53453 +0000 +0000 2015-08-25 01:45:45.53453 -0500 -0500 2015-08-25 00:00:00 +0000 +0000 02:45:02.234
  104. query BB
  105. SELECT now() < now() + '1m'::interval, now() <= now() + '1m'::interval
  106. ----
  107. true true
  108. query BB
  109. SELECT now() + '1m'::interval > now(), now() + '1m'::interval >= now()
  110. ----
  111. true true
  112. # Date sentinel values.
  113. query TTT
  114. SELECT 'epoch'::date, 'infinity'::date, '-infinity'::date
  115. ----
  116. 1970-01-01 00:00:00 +0000 +0000 infinity -infinity
  117. # Date edge cases.
  118. statement error year value 0 is out of range
  119. SELECT '0000-01-01'::date
  120. query TTTTT
  121. SELECT '4714-11-24 BC'::date, '5874897-12-31'::date, '2000-01-01'::date, '0001-01-01'::date, '0001-12-13 BC'::date
  122. ----
  123. -4713-11-24 00:00:00 +0000 +0000 5874897-12-31 00:00:00 +0000 +0000 2000-01-01 00:00:00 +0000 +0000 0001-01-01 00:00:00 +0000 +0000 0000-12-13 00:00:00 +0000 +0000
  124. # Also test as strings because lib/pq marshals the previous results to
  125. # time.Times, which don't stringify the same.
  126. query TTTTT
  127. SELECT '4714-11-24 BC'::date::string, '5874897-12-31'::date::string, '2000-01-01'::date::string, '0001-01-01'::date::string, '0001-12-13 BC'::date::string
  128. ----
  129. 4714-11-24 BC 5874897-12-31 2000-01-01 0001-01-01 0001-12-13 BC
  130. statement error date is out of range
  131. SELECT '4714-11-24 BC'::date - 1
  132. statement error date is out of range
  133. SELECT '5874897-12-31'::date + 1
  134. query TT
  135. SELECT ('4714-11-24 BC'::date + 1)::string, ('5874897-12-31'::date - 1)::string
  136. ----
  137. 4714-11-25 BC 5874897-12-30
  138. query TTTT
  139. SELECT 'infinity'::date + 1, 'infinity'::date - 1, '-infinity'::date + 1, '-infinity'::date - 1
  140. ----
  141. infinity infinity -infinity -infinity
  142. statement error cannot subtract infinite dates
  143. SELECT 'infinity'::date - 'infinity'::date
  144. query I
  145. SELECT '5874897-12-31'::date - '4714-11-24 BC'::date
  146. ----
  147. 2147483493
  148. # TIMESTAMP/DATE builtins.
  149. query T
  150. SELECT age('2001-04-10 22:06:45', '1957-06-13')
  151. ----
  152. 384190:06:45
  153. query B
  154. SELECT age('1957-06-13') - age(now(), '1957-06-13') = interval '0s'
  155. ----
  156. true
  157. query B
  158. SELECT now() - timestamp '2015-06-13' > interval '100h'
  159. ----
  160. true
  161. query TT
  162. SELECT now()::timestamp - now(), now() - now()::timestamp
  163. ----
  164. 00:00:00 00:00:00
  165. query BB
  166. SELECT now() = now()::timestamp, now()::timestamp = now()
  167. ----
  168. true true
  169. query BB
  170. SELECT now()::timestamp < now(), now() < now()::timestamp
  171. ----
  172. false false
  173. query BB
  174. SELECT now()::timestamp <= now(), now() <= now()::timestamp
  175. ----
  176. true true
  177. query B
  178. SELECT current_date - current_date() = 0
  179. ----
  180. true
  181. query B
  182. SELECT now() - current_timestamp() = interval '0s'
  183. ----
  184. true
  185. query B
  186. SELECT now() - current_timestamp = interval '0s'
  187. ----
  188. true
  189. query B
  190. SELECT now() - statement_timestamp() < interval '10s'
  191. ----
  192. true
  193. query B
  194. SELECT clock_timestamp() - statement_timestamp() < interval '10s'
  195. ----
  196. true
  197. query B
  198. SELECT now() - transaction_timestamp() = interval '0s'
  199. ----
  200. true
  201. statement ok
  202. BEGIN TRANSACTION
  203. statement ok
  204. CREATE TABLE kv (
  205. k CHAR PRIMARY KEY,
  206. v TIMESTAMPTZ
  207. )
  208. statement ok
  209. INSERT INTO kv (k,v) VALUES ('a', transaction_timestamp())
  210. query T
  211. SELECT k FROM kv
  212. ----
  213. a
  214. query T
  215. SELECT k FROM kv where v = transaction_timestamp()
  216. ----
  217. a
  218. statement ok
  219. COMMIT TRANSACTION
  220. # Changing timezones changes the output of current_date().
  221. statement ok
  222. RESET TIME ZONE
  223. query BBB
  224. SELECT
  225. d = tz, d = t, d = n
  226. FROM
  227. (
  228. SELECT
  229. current_date()::DATE AS d,
  230. current_date()::TIMESTAMPTZ::DATE AS tz,
  231. current_date()::TIMESTAMP::DATE AS t,
  232. now():::DATE AS n
  233. )
  234. ----
  235. true true true
  236. query B
  237. SELECT now() - current_date()::timestamptz < interval '24h10s'
  238. ----
  239. true
  240. statement ok
  241. SET TIME ZONE 48
  242. query B
  243. SELECT now() - current_date()::timestamptz < interval '24h10s'
  244. ----
  245. true
  246. query BBB
  247. SELECT
  248. d = tz, d = t, d = n
  249. FROM
  250. (
  251. SELECT
  252. current_date()::DATE AS d,
  253. current_date()::TIMESTAMPTZ::DATE AS tz,
  254. current_date()::TIMESTAMP::DATE AS t,
  255. now():::DATE AS n
  256. )
  257. ----
  258. true true true
  259. statement ok
  260. RESET TIME ZONE
  261. # Check that the current_timestamp, now and transaction_timestamp are the same.
  262. # Test that the transaction_timestamp can differ from the statement_timestamp.
  263. # Check that the transaction_timestamp changes with each transaction.
  264. # We use, SELECT * FROM kv, to insert delays of more than a microsecond.
  265. statement ok
  266. BEGIN;
  267. INSERT INTO kv (k,v) VALUES ('b', transaction_timestamp());
  268. SELECT * FROM kv;
  269. INSERT INTO kv (k,v) VALUES ('c', transaction_timestamp());
  270. SELECT * FROM kv;
  271. INSERT INTO kv (k,v) VALUES ('d', current_timestamp());
  272. SELECT * FROM kv;
  273. INSERT INTO kv (k,v) VALUES ('e', current_timestamp());
  274. SELECT * FROM kv;
  275. INSERT INTO kv (k,v) VALUES ('f', now());
  276. SELECT * FROM kv;
  277. INSERT INTO kv (k,v) VALUES ('g', now());
  278. SELECT * FROM kv;
  279. INSERT INTO kv (k,v) VALUES ('h', statement_timestamp());
  280. SELECT * FROM kv;
  281. COMMIT;
  282. SELECT * FROM kv;
  283. BEGIN;
  284. SELECT * FROM KV;
  285. INSERT INTO kv (k,v) VALUES ('i', transaction_timestamp());
  286. COMMIT
  287. query I
  288. SELECT count(DISTINCT (v)) FROM kv
  289. ----
  290. 4
  291. # Test that transaction_timestamp() is consistent in transaction
  292. # spanning multiple batches of statements.
  293. statement ok
  294. DELETE FROM kv
  295. statement ok
  296. BEGIN;
  297. INSERT INTO kv (k,v) VALUES ('a', transaction_timestamp());
  298. SELECT * FROM kv
  299. statement ok
  300. INSERT INTO kv (k,v) VALUES ('b', transaction_timestamp());
  301. SELECT * FROM kv;
  302. COMMIT
  303. statement ok
  304. BEGIN;
  305. SELECT * FROM KV;
  306. INSERT INTO kv (k,v) VALUES ('c', transaction_timestamp());
  307. COMMIT
  308. query I
  309. SELECT count(DISTINCT (v)) FROM kv
  310. ----
  311. 2
  312. statement ok
  313. DROP TABLE kv
  314. statement ok
  315. CREATE TABLE kv (
  316. k INT PRIMARY KEY,
  317. v DECIMAL
  318. )
  319. # Test that cluster_logical_timestamp() is consistent in transactions
  320. # spanning multiple batches of statements.
  321. statement ok
  322. BEGIN;
  323. INSERT INTO kv (k,v) VALUES (1, cluster_logical_timestamp());
  324. SELECT * FROM kv
  325. statement ok
  326. INSERT INTO kv (k,v) VALUES (2, cluster_logical_timestamp());
  327. SELECT * FROM kv;
  328. COMMIT
  329. statement ok
  330. BEGIN;
  331. SELECT * FROM kv;
  332. INSERT INTO kv (k,v) VALUES (3, cluster_logical_timestamp());
  333. COMMIT
  334. query I
  335. SELECT count(DISTINCT (v)) FROM kv
  336. ----
  337. 2
  338. statement ok
  339. DELETE FROM kv
  340. statement ok
  341. CREATE TABLE m (mints DECIMAL)
  342. statement ok
  343. INSERT INTO m VALUES (cluster_logical_timestamp())
  344. # Test that cluster_logical_timestamp() is monotonic in transaction order
  345. statement ok
  346. INSERT INTO kv (k,v) VALUES (1, cluster_logical_timestamp()-(select mints from m));
  347. SELECT * FROM kv
  348. statement ok
  349. INSERT INTO kv (k,v) VALUES (2, cluster_logical_timestamp()-(select mints from m));
  350. SELECT * FROM kv
  351. statement ok
  352. INSERT INTO kv (k,v) VALUES (3, cluster_logical_timestamp()-(select mints from m));
  353. SELECT * FROM kv
  354. statement ok
  355. INSERT INTO kv (k,v) VALUES (4, cluster_logical_timestamp()-(select mints from m));
  356. SELECT * FROM kv
  357. statement ok
  358. INSERT INTO kv (k,v) VALUES (5, cluster_logical_timestamp()-(select mints from m));
  359. SELECT * FROM kv
  360. statement ok
  361. INSERT INTO kv (k,v) VALUES (6, cluster_logical_timestamp()-(select mints from m));
  362. SELECT * FROM kv
  363. query I
  364. SELECT k FROM kv ORDER BY v
  365. ----
  366. 1
  367. 2
  368. 3
  369. 4
  370. 5
  371. 6
  372. statement ok
  373. SET TIME ZONE UTC
  374. statement ok
  375. CREATE TABLE ex (
  376. k BIGINT PRIMARY KEY,
  377. element STRING,
  378. input TIMESTAMPTZ,
  379. extract_result INT,
  380. date_trunc_result TIMESTAMPTZ
  381. )
  382. statement ok
  383. INSERT INTO ex VALUES
  384. (1, 'year', '2001-04-10 12:04:59', 2001, '2001-01-01 00:00:00'),
  385. (2, 'year', '2016-02-10 19:46:33.306157519', 2016, '2016-01-01 00:00:00'),
  386. (3, 'years', '2016-02-10 19:46:33.306157519', 2016, '2016-01-01 00:00:00'),
  387. (4, 'quarter', '2001-04-10 12:04:59', 2, '2001-04-01 00:00:00'),
  388. (5, 'quarter', '2016-02-10 19:46:33.306157519', 1, '2016-01-01 00:00:00'),
  389. (6, 'quarter', '2016-05-10 19:46:33.306157519', 2, '2016-04-01 00:00:00'),
  390. (7, 'quarter', '2016-09-09 19:46:33.306157519', 3, '2016-07-01 00:00:00'),
  391. (8, 'quarter', '2016-10-10 19:46:33.306157519', 4, '2016-10-01 00:00:00'),
  392. (9, 'month', '2001-04-10 12:04:59', 4, '2001-04-01 00:00:00'),
  393. (10, 'month', '2016-02-10 19:46:33.306157519', 2, '2016-02-01 00:00:00'),
  394. (11, 'months', '2016-02-10 19:46:33.306157519', 2, '2016-02-01 00:00:00'),
  395. (12, 'week', '2001-04-10 12:04:59', 15, '2001-04-08 00:00:00'),
  396. (13, 'weeks', '2001-01-05 12:04:59', 1, '2000-12-31 00:00:00'),
  397. (14, 'day', '2001-04-10 12:04:59', 10, '2001-04-10 00:00:00'),
  398. (15, 'day', '2016-02-10 19:46:33.306157519', 10, '2016-02-10 00:00:00'),
  399. (16, 'days', '2016-02-10 19:46:33.306157519', 10, '2016-02-10 00:00:00'),
  400. (17, 'dayofweek', '2001-04-10 12:04:59', 2, null),
  401. (18, 'dow', '2001-04-12 12:04:59', 4, null),
  402. (19, 'dayofyear', '2001-04-10 12:04:59', 100, null),
  403. (20, 'doy', '2001-04-12 12:04:59', 102, null),
  404. (21, 'epoch', '1970-01-02 00:00:01.000001', 86401, null),
  405. (22, 'epoch', '1970-01-02 00:00:01.000001-04', 100801, null),
  406. (23, 'epoch', '2001-04-10 12:04:59', 986904299, null),
  407. (24, 'hour', '2001-04-10 12:04:59', 12, '2001-04-10 12:00:00'),
  408. (25, 'hour', '2016-02-10 19:46:33.306157519', 19, '2016-02-10 19:00:00'),
  409. (26, 'hour', '2016-02-10 19:46:33.306157519-04', 23, '2016-02-10 19:00:00-04'),
  410. (27, 'hours', '2016-02-10 19:46:33.306157519', 19, '2016-02-10 19:00:00'),
  411. (28, 'hours', '2016-02-10 19:46:33.306157519-04', 23, '2016-02-10 19:00:00-04'),
  412. (29, 'minute', '2001-04-10 12:04:59', 4, '2001-04-10 12:04:00'),
  413. (30, 'minute', '2016-02-10 19:46:33.306157519', 46, '2016-02-10 19:46:00'),
  414. (31, 'minutes', '2016-02-10 19:46:33.306157519', 46, '2016-02-10 19:46:00'),
  415. (32, 'second', '2001-04-10 12:04:59.234', 59, '2001-04-10 12:04:59'),
  416. (33, 'second', '2016-02-10 19:46:33.306157519', 33, '2016-02-10 19:46:33'),
  417. (34, 'seconds', '2016-02-10 19:46:33.306157519', 33, '2016-02-10 19:46:33'),
  418. (35, 'millisecond', '2001-04-10 12:04:59.234567', 234, '2001-04-10 12:04:59.234'),
  419. (36, 'millisecond', '2016-02-10 19:46:33.306157519', 306, '2016-02-10 19:46:33.306'),
  420. (37, 'milliseconds', '2016-02-10 19:46:33.306157519', 306, '2016-02-10 19:46:33.306'),
  421. (38, 'microsecond', '2001-04-10 12:04:59.34565423', 345654, '2001-04-10 12:04:59.345654'),
  422. (39, 'microsecond', '2016-02-10 19:46:33.306157519', 306158, '2016-02-10 19:46:33.306158'),
  423. (40, 'microseconds', '2016-02-10 19:46:33.306157519', 306158, '2016-02-10 19:46:33.306158')
  424. query IBI
  425. SELECT k, extract(element, input::timestamp) = extract_result, extract(element, input::timestamp) FROM ex ORDER BY k
  426. ----
  427. 1 true 2001
  428. 2 true 2016
  429. 3 true 2016
  430. 4 true 2
  431. 5 true 1
  432. 6 true 2
  433. 7 true 3
  434. 8 true 4
  435. 9 true 4
  436. 10 true 2
  437. 11 true 2
  438. 12 true 15
  439. 13 true 1
  440. 14 true 10
  441. 15 true 10
  442. 16 true 10
  443. 17 true 2
  444. 18 true 4
  445. 19 true 100
  446. 20 true 102
  447. 21 true 86401
  448. 22 true 100801
  449. 23 true 986904299
  450. 24 true 12
  451. 25 true 19
  452. 26 true 23
  453. 27 true 19
  454. 28 true 23
  455. 29 true 4
  456. 30 true 46
  457. 31 true 46
  458. 32 true 59
  459. 33 true 33
  460. 34 true 33
  461. 35 true 234
  462. 36 true 306
  463. 37 true 306
  464. 38 true 345654
  465. 39 true 306158
  466. 40 true 306158
  467. query error extract\(\): unsupported timespan: nansecond
  468. SELECT extract(nansecond from '2001-04-10 12:04:59.34565423'::timestamp)
  469. query error unknown unit "nanosecond"
  470. SELECT INTERVAL '1 nanosecond';
  471. query error unknown unit "ns"
  472. SELECT INTERVAL '1 ns';
  473. query IBI
  474. SELECT k, extract(element, input::timestamptz) = extract_result, extract(element, input::timestamptz) FROM ex ORDER BY k
  475. ----
  476. 1 true 2001
  477. 2 true 2016
  478. 3 true 2016
  479. 4 true 2
  480. 5 true 1
  481. 6 true 2
  482. 7 true 3
  483. 8 true 4
  484. 9 true 4
  485. 10 true 2
  486. 11 true 2
  487. 12 true 15
  488. 13 true 1
  489. 14 true 10
  490. 15 true 10
  491. 16 true 10
  492. 17 true 2
  493. 18 true 4
  494. 19 true 100
  495. 20 true 102
  496. 21 true 86401
  497. 22 true 100801
  498. 23 true 986904299
  499. 24 true 12
  500. 25 true 19
  501. 26 true 23
  502. 27 true 19
  503. 28 true 23
  504. 29 true 4
  505. 30 true 46
  506. 31 true 46
  507. 32 true 59
  508. 33 true 33
  509. 34 true 33
  510. 35 true 234
  511. 36 true 306
  512. 37 true 306
  513. 38 true 345654
  514. 39 true 306158
  515. 40 true 306158
  516. query error extract\(\): unsupported timespan: nansecond
  517. SELECT extract(nansecond from '2001-04-10 12:04:59.34565423'::timestamptz)
  518. query I
  519. SELECT extract(hour from '2016-02-10 19:46:33.306157519-04'::timestamptz)
  520. ----
  521. 19
  522. query I
  523. SELECT extract(hours from '2016-02-10 19:46:33.306157519-04'::timestamptz)
  524. ----
  525. 19
  526. query IBT
  527. SELECT k, date_trunc(element, input::timestamp) = date_trunc_result, date_trunc(element, input::timestamp)::string
  528. FROM ex WHERE date_trunc_result IS NOT NULL ORDER BY k
  529. ----
  530. 1 true 2001-01-01 00:00:00+00:00
  531. 2 true 2016-01-01 00:00:00+00:00
  532. 3 true 2016-01-01 00:00:00+00:00
  533. 4 true 2001-04-01 00:00:00+00:00
  534. 5 true 2016-01-01 00:00:00+00:00
  535. 6 true 2016-04-01 00:00:00+00:00
  536. 7 true 2016-07-01 00:00:00+00:00
  537. 8 true 2016-10-01 00:00:00+00:00
  538. 9 true 2001-04-01 00:00:00+00:00
  539. 10 true 2016-02-01 00:00:00+00:00
  540. 11 true 2016-02-01 00:00:00+00:00
  541. 12 true 2001-04-08 00:00:00+00:00
  542. 13 true 2000-12-31 00:00:00+00:00
  543. 14 true 2001-04-10 00:00:00+00:00
  544. 15 true 2016-02-10 00:00:00+00:00
  545. 16 true 2016-02-10 00:00:00+00:00
  546. 24 true 2001-04-10 12:00:00+00:00
  547. 25 true 2016-02-10 19:00:00+00:00
  548. 26 true 2016-02-10 23:00:00+00:00
  549. 27 true 2016-02-10 19:00:00+00:00
  550. 28 true 2016-02-10 23:00:00+00:00
  551. 29 true 2001-04-10 12:04:00+00:00
  552. 30 true 2016-02-10 19:46:00+00:00
  553. 31 true 2016-02-10 19:46:00+00:00
  554. 32 true 2001-04-10 12:04:59+00:00
  555. 33 true 2016-02-10 19:46:33+00:00
  556. 34 true 2016-02-10 19:46:33+00:00
  557. 35 true 2001-04-10 12:04:59.234+00:00
  558. 36 true 2016-02-10 19:46:33.306+00:00
  559. 37 true 2016-02-10 19:46:33.306+00:00
  560. 38 true 2001-04-10 12:04:59.345654+00:00
  561. 39 true 2016-02-10 19:46:33.306158+00:00
  562. 40 true 2016-02-10 19:46:33.306158+00:00
  563. query IBT
  564. SELECT k, date_trunc(element, input::timestamptz) = date_trunc_result, date_trunc(element, input::timestamptz)::string
  565. FROM ex WHERE date_trunc_result IS NOT NULL ORDER BY k
  566. ----
  567. 1 true 2001-01-01 00:00:00+00:00
  568. 2 true 2016-01-01 00:00:00+00:00
  569. 3 true 2016-01-01 00:00:00+00:00
  570. 4 true 2001-04-01 00:00:00+00:00
  571. 5 true 2016-01-01 00:00:00+00:00
  572. 6 true 2016-04-01 00:00:00+00:00
  573. 7 true 2016-07-01 00:00:00+00:00
  574. 8 true 2016-10-01 00:00:00+00:00
  575. 9 true 2001-04-01 00:00:00+00:00
  576. 10 true 2016-02-01 00:00:00+00:00
  577. 11 true 2016-02-01 00:00:00+00:00
  578. 12 true 2001-04-08 00:00:00+00:00
  579. 13 true 2000-12-31 00:00:00+00:00
  580. 14 true 2001-04-10 00:00:00+00:00
  581. 15 true 2016-02-10 00:00:00+00:00
  582. 16 true 2016-02-10 00:00:00+00:00
  583. 24 true 2001-04-10 12:00:00+00:00
  584. 25 true 2016-02-10 19:00:00+00:00
  585. 26 true 2016-02-10 23:00:00+00:00
  586. 27 true 2016-02-10 19:00:00+00:00
  587. 28 true 2016-02-10 23:00:00+00:00
  588. 29 true 2001-04-10 12:04:00+00:00
  589. 30 true 2016-02-10 19:46:00+00:00
  590. 31 true 2016-02-10 19:46:00+00:00
  591. 32 true 2001-04-10 12:04:59+00:00
  592. 33 true 2016-02-10 19:46:33+00:00
  593. 34 true 2016-02-10 19:46:33+00:00
  594. 35 true 2001-04-10 12:04:59.234+00:00
  595. 36 true 2016-02-10 19:46:33.306+00:00
  596. 37 true 2016-02-10 19:46:33.306+00:00
  597. 38 true 2001-04-10 12:04:59.345654+00:00
  598. 39 true 2016-02-10 19:46:33.306158+00:00
  599. 40 true 2016-02-10 19:46:33.306158+00:00
  600. query T
  601. SELECT date_trunc('hour', '2016-02-10 19:46:33.306157519-04'::timestamptz)::string
  602. ----
  603. 2016-02-10 19:00:00-04:00
  604. query T
  605. SELECT date_trunc('hours', '2016-02-10 19:46:33.306157519-04'::timestamptz)::string
  606. ----
  607. 2016-02-10 19:00:00-04:00
  608. query IBT
  609. SELECT k, date_trunc(element, input::date) = date_trunc_result::date, date_trunc(element, input::date)::string
  610. FROM ex WHERE date_trunc_result IS NOT NULL ORDER BY k
  611. ----
  612. 1 true 2001-01-01 00:00:00+00:00
  613. 2 true 2016-01-01 00:00:00+00:00
  614. 3 true 2016-01-01 00:00:00+00:00
  615. 4 true 2001-04-01 00:00:00+00:00
  616. 5 true 2016-01-01 00:00:00+00:00
  617. 6 true 2016-04-01 00:00:00+00:00
  618. 7 true 2016-07-01 00:00:00+00:00
  619. 8 true 2016-10-01 00:00:00+00:00
  620. 9 true 2001-04-01 00:00:00+00:00
  621. 10 true 2016-02-01 00:00:00+00:00
  622. 11 true 2016-02-01 00:00:00+00:00
  623. 12 true 2001-04-08 00:00:00+00:00
  624. 13 true 2000-12-31 00:00:00+00:00
  625. 14 true 2001-04-10 00:00:00+00:00
  626. 15 true 2016-02-10 00:00:00+00:00
  627. 16 true 2016-02-10 00:00:00+00:00
  628. 24 true 2001-04-10 00:00:00+00:00
  629. 25 true 2016-02-10 00:00:00+00:00
  630. 26 true 2016-02-10 00:00:00+00:00
  631. 27 true 2016-02-10 00:00:00+00:00
  632. 28 true 2016-02-10 00:00:00+00:00
  633. 29 true 2001-04-10 00:00:00+00:00
  634. 30 true 2016-02-10 00:00:00+00:00
  635. 31 true 2016-02-10 00:00:00+00:00
  636. 32 true 2001-04-10 00:00:00+00:00
  637. 33 true 2016-02-10 00:00:00+00:00
  638. 34 true 2016-02-10 00:00:00+00:00
  639. 35 true 2001-04-10 00:00:00+00:00
  640. 36 true 2016-02-10 00:00:00+00:00
  641. 37 true 2016-02-10 00:00:00+00:00
  642. 38 true 2001-04-10 00:00:00+00:00
  643. 39 true 2016-02-10 00:00:00+00:00
  644. 40 true 2016-02-10 00:00:00+00:00
  645. query T
  646. SELECT (timestamp '2016-02-10 19:46:33.306157519')::string
  647. ----
  648. 2016-02-10 19:46:33.306158+00:00
  649. query T
  650. SELECT (timestamptz '2016-02-10 19:46:33.306157519')::string
  651. ----
  652. 2016-02-10 19:46:33.306158+00:00
  653. # Test SET TIME ZONE
  654. # default time zone of UTC
  655. query T
  656. SELECT '2015-08-25 05:45:45.53453'::timestamp
  657. ----
  658. 2015-08-25 05:45:45.53453 +0000 +0000
  659. query T
  660. SELECT '2015-08-25 05:45:45.53453'::timestamp
  661. ----
  662. 2015-08-25 05:45:45.53453 +0000 +0000
  663. statement ok
  664. SET TIME ZONE 'Europe/Rome'
  665. query error pq: unimplemented: timestamp abbreviations not supported
  666. SELECT '2015-08-25 05:45:45.53453 CET'::timestamptz WHERE false
  667. statement ok
  668. SET TIME ZONE +1
  669. query error pq: unimplemented: timestamp abbreviations not supported
  670. SELECT '2015-08-25 05:45:45.53453 CET'::timestamptz WHERE false
  671. query T
  672. SELECT '2015-08-25 05:45:45.53453'::timestamp
  673. ----
  674. 2015-08-25 05:45:45.53453 +0000 +0000
  675. query T
  676. SELECT '2015-08-25 05:45:45.53453'::timestamptz
  677. ----
  678. 2015-08-25 05:45:45.53453 +0100 +0100
  679. query T
  680. SELECT '2015-08-25 05:45:45-01:00'::timestamp
  681. ----
  682. 2015-08-25 05:45:45 +0000 +0000
  683. query T
  684. SELECT '2015-08-25 05:45:45-01:00'::timestamp::timestamptz
  685. ----
  686. 2015-08-25 05:45:45 +0100 +0100
  687. query T
  688. SELECT '2015-08-25 05:45:45-01:00'::timestamptz::timestamp
  689. ----
  690. 2015-08-25 07:45:45 +0000 +0000
  691. query T
  692. SELECT '2015-08-25 05:45:45-01:00'::timestamptz
  693. ----
  694. 2015-08-25 07:45:45 +0100 +0100
  695. # alias test: TIMEZONE instead of TIME ZONE
  696. statement ok
  697. SET TIMEZONE = +2
  698. query error pq: unimplemented: timestamp abbreviations not supported
  699. SELECT '2015-08-25 05:45:45.53453 CET'::timestamptz WHERE false
  700. query T
  701. SELECT '2015-08-25 05:45:45.53453'::timestamp
  702. ----
  703. 2015-08-25 05:45:45.53453 +0000 +0000
  704. query T
  705. SELECT '2015-08-25 05:45:45.53453'::timestamptz
  706. ----
  707. 2015-08-25 05:45:45.53453 +0200 +0200
  708. query T
  709. SELECT '2015-08-25 05:45:45-01:00'::timestamp
  710. ----
  711. 2015-08-25 05:45:45 +0000 +0000
  712. query T
  713. SELECT '2015-08-25 05:45:45-01:00'::timestamp::timestamptz
  714. ----
  715. 2015-08-25 05:45:45 +0200 +0200
  716. query T
  717. SELECT '2015-08-25 05:45:45-01:00'::timestamptz::timestamp
  718. ----
  719. 2015-08-25 08:45:45 +0000 +0000
  720. query T
  721. SELECT '2015-08-25 05:45:45-01:00'::timestamptz
  722. ----
  723. 2015-08-25 08:45:45 +0200 +0200
  724. statement ok
  725. SET TIME ZONE -5
  726. query T
  727. SELECT '2015-08-24 23:45:45.53453'::timestamp
  728. ----
  729. 2015-08-24 23:45:45.53453 +0000 +0000
  730. query T
  731. SELECT '2015-08-24 23:45:45.53453'::timestamptz
  732. ----
  733. 2015-08-24 23:45:45.53453 -0500 -0500
  734. query T
  735. SELECT '2015-08-24 23:45:45.53453 UTC'::timestamp
  736. ----
  737. 2015-08-24 23:45:45.53453 +0000 +0000
  738. query T
  739. SELECT '2015-08-24 23:45:45.53453 UTC'::timestamptz
  740. ----
  741. 2015-08-24 18:45:45.53453 -0500 -0500
  742. query T
  743. SELECT '2015-08-24 23:45:45.53453-02:00'::timestamp
  744. ----
  745. 2015-08-24 23:45:45.53453 +0000 +0000
  746. query T
  747. SELECT '2015-08-24 23:45:45.53453-02:00'::timestamptz
  748. ----
  749. 2015-08-24 20:45:45.53453 -0500 -0500
  750. query T
  751. SELECT '2015-08-24 23:45:45.53453-05:00'::timestamptz
  752. ----
  753. 2015-08-24 23:45:45.53453 -0500 -0500
  754. query T
  755. SELECT '2015-08-24 23:45:45.534 -02:00'::timestamp
  756. ----
  757. 2015-08-24 23:45:45.534 +0000 +0000
  758. query T
  759. SELECT '2015-08-24 23:45:45.534 -02:00'::timestamptz
  760. ----
  761. 2015-08-24 20:45:45.534 -0500 -0500
  762. query T
  763. SELECT '2015-08-25 05:45:45-01:00'::timestamp::timestamptz
  764. ----
  765. 2015-08-25 05:45:45 -0500 -0500
  766. query T
  767. SELECT '2015-08-25 05:45:45-01:00'::timestamptz::timestamp
  768. ----
  769. 2015-08-25 01:45:45 +0000 +0000
  770. # using Eastern instead of fixed -5 should handle DST.
  771. statement ok
  772. SET TIME ZONE 'America/New_York'
  773. query T
  774. SELECT '2015-08-25 05:45:45-01:00'::timestamp::timestamptz
  775. ----
  776. 2015-08-25 05:45:45 -0400 -0400
  777. query T
  778. SELECT '2015-08-25 05:45:45-01:00'::timestamptz::timestamp
  779. ----
  780. 2015-08-25 02:45:45 +0000 +0000
  781. statement error cannot find time zone "foobar"
  782. SET TIME ZONE 'foobar'
  783. statement ok
  784. SET TIME ZONE default
  785. query T
  786. SELECT '2015-08-24 21:45:45.53453'::timestamptz
  787. ----
  788. 2015-08-24 21:45:45.53453 +0000 UTC
  789. statement ok
  790. SET TIME ZONE local
  791. query T
  792. SELECT '2015-08-24 21:45:45.53453'::timestamptz
  793. ----
  794. 2015-08-24 21:45:45.53453 +0000 UTC
  795. statement ok
  796. SET TIME ZONE 'DEFAULT'
  797. query T
  798. SELECT '2015-08-24 21:45:45.53453'::timestamptz
  799. ----
  800. 2015-08-24 21:45:45.53453 +0000 UTC
  801. statement ok
  802. SET TIME ZONE ''
  803. query T
  804. SELECT '2015-08-24 21:45:45.53453'::timestamptz
  805. ----
  806. 2015-08-24 21:45:45.53453 +0000 UTC
  807. statement ok
  808. SET TIME ZONE INTERVAL '-7h'
  809. query T
  810. SELECT '2015-08-24 21:45:45.53453'::timestamp
  811. ----
  812. 2015-08-24 21:45:45.53453 +0000 +0000
  813. query T
  814. SELECT '2015-08-24 21:45:45.53453'::timestamptz
  815. ----
  816. 2015-08-24 21:45:45.53453 -0700 -0700
  817. statement ok
  818. SET TIME ZONE -7.5
  819. query T
  820. SELECT '2015-08-24 21:45:45.53453'::timestamp
  821. ----
  822. 2015-08-24 21:45:45.53453 +0000 +0000
  823. query T
  824. SELECT '2015-08-24 21:45:45.53453'::timestamptz
  825. ----
  826. 2015-08-24 21:45:45.53453 -0730 -0730
  827. query T
  828. SELECT '2015-08-24 21:45:45.53453 UTC'::timestamptz
  829. ----
  830. 2015-08-24 14:15:45.53453 -0730 -0730
  831. statement ok
  832. SET TIME ZONE LOCAL
  833. query T
  834. SELECT '2015-08-25 04:45:45.53453'::timestamp
  835. ----
  836. 2015-08-25 04:45:45.53453 +0000 +0000
  837. statement ok
  838. SET TIME ZONE DEFAULT
  839. query T
  840. SELECT '2015-08-25 04:45:45.53453'::timestamp
  841. ----
  842. 2015-08-25 04:45:45.53453 +0000 +0000
  843. # reset for what follows.
  844. statement ok
  845. SET TIME ZONE 'UTC'
  846. # Check that casting from a timestamp to a date and vice versa
  847. # uses the time zone.
  848. query TTTT
  849. SELECT b, b::date, c, c::date FROM u WHERE a = 123
  850. ----
  851. 2015-08-30 03:34:45.34567 +0000 +0000 2015-08-30 00:00:00 +0000 +0000 2015-08-30 03:34:45.34567 +0000 UTC 2015-08-30 00:00:00 +0000 +0000
  852. query T
  853. SELECT d::timestamp FROM u WHERE a = 123
  854. ----
  855. 2015-08-30 00:00:00 +0000 +0000
  856. statement ok
  857. SET TIME ZONE -5
  858. query TTTT
  859. SELECT b, b::date, c, c::date FROM u WHERE a = 123
  860. ----
  861. 2015-08-30 03:34:45.34567 +0000 +0000 2015-08-30 00:00:00 +0000 +0000 2015-08-29 22:34:45.34567 -0500 -0500 2015-08-29 00:00:00 +0000 +0000
  862. query T
  863. SELECT d::timestamp FROM u WHERE a = 123
  864. ----
  865. 2015-08-30 00:00:00 +0000 +0000
  866. statement ok
  867. SET TIME ZONE UTC
  868. statement ok
  869. CREATE TABLE tz (
  870. a INT PRIMARY KEY,
  871. b TIMESTAMP,
  872. c TIMESTAMPTZ,
  873. d TIMESTAMPTZ
  874. )
  875. query TTBTTTB
  876. SHOW COLUMNS FROM tz
  877. ----
  878. a INT8 false NULL · {primary} false
  879. b TIMESTAMP true NULL · {} false
  880. c TIMESTAMPTZ true NULL · {} false
  881. d TIMESTAMPTZ true NULL · {} false
  882. statement ok
  883. INSERT INTO tz VALUES
  884. (1, timestamp '2015-08-30 03:34:45', timestamptz '2015-08-30 03:34:45', timestamptz '2015-08-30 03:34:45'),
  885. (2, timestamp '2015-08-30 03:34:45+01:00', timestamptz '2015-08-30 03:34:45+01:00', timestamptz '2015-08-30 03:34:45')
  886. statement ok
  887. SET TIME ZONE -2
  888. query ITT
  889. SELECT a, b, c FROM tz ORDER BY a
  890. ----
  891. 1 2015-08-30 03:34:45 +0000 +0000 2015-08-30 01:34:45 -0200 -0200
  892. 2 2015-08-30 03:34:45 +0000 +0000 2015-08-30 00:34:45 -0200 -0200
  893. query TTTT
  894. SELECT b + interval '1m', interval '1m' + b, c + interval '1m', interval '1m' + c FROM tz WHERE a = 1
  895. ----
  896. 2015-08-30 03:35:45 +0000 +0000 2015-08-30 03:35:45 +0000 +0000 2015-08-30 01:35:45 -0200 -0200 2015-08-30 01:35:45 -0200 -0200
  897. query I
  898. SELECT a FROM tz WHERE c = d
  899. ----
  900. 1
  901. query I rowsort
  902. SELECT a FROM tz WHERE c <= d
  903. ----
  904. 1
  905. 2
  906. query I
  907. SELECT a FROM tz WHERE c < d
  908. ----
  909. 2
  910. query I rowsort
  911. SELECT a FROM tz WHERE b = c::timestamp
  912. ----
  913. query I rowsort
  914. SELECT a FROM tz WHERE c = d::timestamp
  915. ----
  916. 1
  917. # reset for what follows.
  918. statement ok
  919. SET TIME ZONE 'UTC'
  920. statement ok
  921. SET TIME ZONE -5
  922. query T
  923. SHOW TIME ZONE
  924. ----
  925. -5
  926. statement ok
  927. SET TIME ZONE INTERVAL '+04:00' HOUR TO MINUTE
  928. query T
  929. SELECT '2015-08-24 21:45:45.53453'::timestamptz
  930. ----
  931. 2015-08-24 21:45:45.53453 +0400 +0400
  932. statement ok
  933. SET TIME ZONE INTERVAL '-04:00' MINUTE TO SECOND
  934. query T
  935. SELECT '2015-08-24 21:45:45.53453'::timestamptz
  936. ----
  937. 2015-08-24 21:45:45.53453 -0400 -0400
  938. # alias test: TIMEZONE instead of TIME ZONE
  939. statement ok
  940. SET TIMEZONE TO INTERVAL '+05:00' HOUR TO MINUTE
  941. query T
  942. SELECT '2015-08-24 21:45:45.53453'::timestamptz
  943. ----
  944. 2015-08-24 21:45:45.53453 +0500 +0500
  945. statement ok
  946. SET TIMEZONE TO INTERVAL '-05:00' MINUTE TO SECOND
  947. query T
  948. SELECT '2015-08-24 21:45:45.53453'::timestamptz
  949. ----
  950. 2015-08-24 21:45:45.53453 -0500 -0500
  951. statement ok
  952. SET TIME ZONE 0
  953. query T
  954. SHOW TIME ZONE
  955. ----
  956. 0
  957. query T
  958. SELECT DATE '1999-01-01' + INTERVAL '4 minutes'
  959. ----
  960. 1999-01-01 00:04:00 +0000 UTC
  961. query T
  962. SELECT INTERVAL '4 minutes' + DATE '1999-01-01'
  963. ----
  964. 1999-01-01 00:04:00 +0000 UTC
  965. query T
  966. SELECT DATE '1999-01-01' - INTERVAL '4 minutes'
  967. ----
  968. 1998-12-31 23:56:00 +0000 UTC
  969. query B
  970. SELECT DATE '1999-01-02' < TIMESTAMPTZ '1999-01-01'
  971. ----
  972. false
  973. query B
  974. SELECT DATE '1999-01-02' < TIMESTAMP '1999-01-01'
  975. ----
  976. false
  977. query B
  978. SELECT DATE '1999-01-02' <= TIMESTAMPTZ '1999-01-01'
  979. ----
  980. false
  981. query B
  982. SELECT DATE '1999-01-02' <= TIMESTAMP '1999-01-01'
  983. ----
  984. false
  985. query B
  986. SELECT DATE '1999-01-02' <= TIMESTAMPTZ '1999-01-02'
  987. ----
  988. true
  989. query B
  990. SELECT DATE '1999-01-02' <= TIMESTAMP '1999-01-02'
  991. ----
  992. true
  993. query B
  994. SELECT DATE '1999-01-02' > TIMESTAMPTZ '1999-01-01'
  995. ----
  996. true
  997. query B
  998. SELECT DATE '1999-01-02' > TIMESTAMP '1999-01-01'
  999. ----
  1000. true
  1001. query B
  1002. SELECT DATE '1999-01-02' >= TIMESTAMPTZ '1999-01-01'
  1003. ----
  1004. true
  1005. query B
  1006. SELECT DATE '1999-01-02' >= TIMESTAMP '1999-01-01'
  1007. ----
  1008. true
  1009. query B
  1010. SELECT DATE '1999-01-02' = TIMESTAMPTZ '1999-01-01'
  1011. ----
  1012. false
  1013. query B
  1014. SELECT DATE '1999-01-01' = TIMESTAMP '1999-01-01'
  1015. ----
  1016. true
  1017. ## Test parsing of unitless interval constants with field specifiers
  1018. query TTTTT
  1019. SELECT INTERVAL '5', INTERVAL '5' SECOND, INTERVAL '5' MINUTE TO SECOND, INTERVAL '5' HOUR TO SECOND, INTERVAL '5' DAY TO SECOND;
  1020. ----
  1021. 00:00:05 00:00:05 00:00:05 00:00:05 00:00:05
  1022. query TTT
  1023. SELECT INTERVAL '5' MINUTE, INTERVAL '5' HOUR TO MINUTE, INTERVAL '5' DAY TO MINUTE;
  1024. ----
  1025. 00:05:00 00:05:00 00:05:00
  1026. query TT
  1027. SELECT INTERVAL '5' HOUR, INTERVAL '5' DAY TO HOUR;
  1028. ----
  1029. 05:00:00 05:00:00
  1030. query T
  1031. SELECT INTERVAL '5' DAY;
  1032. ----
  1033. 5 days
  1034. query TT
  1035. SELECT INTERVAL '5' MONTH, INTERVAL '5' YEAR TO MONTH;
  1036. ----
  1037. 5 mons 5 mons
  1038. query T
  1039. SELECT INTERVAL '5' YEAR
  1040. ----
  1041. 5 years
  1042. ## Test truncation via field specifiers
  1043. query TTTT
  1044. SELECT INTERVAL '1-2 3 4:5:6' SECOND, INTERVAL '1-2 3 4:5:6' MINUTE TO SECOND, INTERVAL '1-2 3 4:5:6' HOUR TO SECOND, INTERVAL '1-2 3 4:5:6' DAY TO SECOND;
  1045. ----
  1046. 1 year 2 mons 3 days 04:05:06 1 year 2 mons 3 days 04:05:06 1 year 2 mons 3 days 04:05:06 1 year 2 mons 3 days 04:05:06
  1047. query TTT
  1048. SELECT INTERVAL '1-2 3 4:5:6' MINUTE, INTERVAL '1-2 3 4:5:6' HOUR TO MINUTE, INTERVAL '1-2 3 4:5:6' DAY TO MINUTE;
  1049. ----
  1050. 1 year 2 mons 3 days 04:05:00 1 year 2 mons 3 days 04:05:00 1 year 2 mons 3 days 04:05:00
  1051. query TT
  1052. SELECT INTERVAL '1-2 3 4:5:6' HOUR, INTERVAL '1-2 3 4:5:6' DAY TO HOUR
  1053. ----
  1054. 1 year 2 mons 3 days 04:00:00 1 year 2 mons 3 days 04:00:00
  1055. query T
  1056. SELECT INTERVAL '1-2 3 4:5:6' DAY;
  1057. ----
  1058. 1 year 2 mons 3 days
  1059. query TT
  1060. SELECT INTERVAL '1-2 3 4:5:6' MONTH, INTERVAL '1-2 3 4:5:6' YEAR TO MONTH;
  1061. ----
  1062. 1 year 2 mons 1 year 2 mons
  1063. query T
  1064. SELECT INTERVAL '1-2 3 4:5:6' YEAR
  1065. ----
  1066. 1 year
  1067. # Test regression, database-issues#6155. When a built-in returns a datum that does not
  1068. # match the function signature, distSQL will panic on table scans.
  1069. statement ok
  1070. CREATE TABLE topics (
  1071. ts TIMESTAMP,
  1072. tstz TIMESTAMPTZ,
  1073. "date" DATE
  1074. );
  1075. statement ok
  1076. INSERT INTO topics VALUES (
  1077. '2017-12-05 04:04:04.913231+00:00',
  1078. '2017-12-05 04:04:04.913231+00:00',
  1079. '2017-12-05 04:04:04.913231+00:00'
  1080. );
  1081. query T
  1082. SELECT date_trunc('month', ts) AS date_trunc_month_created_at FROM "topics";
  1083. ----
  1084. 2017-12-01 00:00:00 +0000 +0000
  1085. query T
  1086. SELECT date_trunc('month', tstz) AS date_trunc_month_created_at FROM "topics";
  1087. ----
  1088. 2017-12-01 00:00:00 +0000 UTC
  1089. query T
  1090. SELECT date_trunc('month', "date") AS date_trunc_month_created_at FROM "topics";
  1091. ----
  1092. 2017-12-01 00:00:00 +0000 UTC
  1093. # Test negative years to ensure they can round-trip through the parser.
  1094. # Also ensure that we don't trigger any of the "convenience" rules.
  1095. # Update: dates now have a much more limited range such that the original
  1096. # dates from this issue are no longer possible to express.
  1097. subtest regression_35255
  1098. statement error date is out of range
  1099. SELECT '-56325279622-12-26'::DATE
  1100. statement error date is out of range
  1101. SELECT '-5632-12-26'::DATE
  1102. query T
  1103. SELECT '-563-12-26'::DATE
  1104. ----
  1105. -0563-12-26 00:00:00 +0000 +0000
  1106. query T
  1107. SELECT '-56-12-26'::DATE
  1108. ----
  1109. -0056-12-26 00:00:00 +0000 +0000
  1110. query T
  1111. SELECT '-5-12-26'::DATE
  1112. ----
  1113. -0005-12-26 00:00:00 +0000 +0000
  1114. # Update: dates now have a much more limited range such that the original
  1115. # dates from this issue are no longer possible to express.
  1116. subtest regression_36146
  1117. statement error out of range
  1118. WITH
  1119. w (c) AS (VALUES (NULL), (NULL))
  1120. SELECT
  1121. '1971-03-18'::DATE + 300866802885581286
  1122. FROM
  1123. w
  1124. ORDER BY
  1125. c
  1126. statement error out of range
  1127. SELECT
  1128. '1971-03-18'::DATE + 300866802885581286
  1129. # Update: dates now have a much more limited range such that the original
  1130. # dates from this issue are no longer possible to express.
  1131. subtest regression_36557
  1132. statement error out of range
  1133. SELECT 7133080445639580613::INT8 + '1977-11-03'::DATE
  1134. statement error out of range
  1135. SELECT '-239852040018-04-28':::DATE
  1136. statement error out of range
  1137. SELECT(7133080445639580613::INT8 + '1977-11-03'::DATE) = '-239852040018-04-28':::DATE
  1138. subtest interval_math
  1139. query TTTTTTT
  1140. SELECT
  1141. i,
  1142. i / 2::INT8,
  1143. i * 2::INT8,
  1144. i / 2::FLOAT8,
  1145. i * 2::FLOAT8,
  1146. i / .2362::FLOAT8,
  1147. i * .2362::FLOAT8
  1148. FROM
  1149. (
  1150. VALUES
  1151. ('1 day'::INTERVAL),
  1152. ('1 month'::INTERVAL),
  1153. ('1 hour'::INTERVAL),
  1154. ('1 month 2 days 4 hours'::INTERVAL)
  1155. )
  1156. AS v (i)
  1157. ORDER BY
  1158. i
  1159. ----
  1160. 01:00:00 00:30:00 02:00:00 00:30:00 02:00:00 04:14:01.320914 00:14:10.32
  1161. 1 day 12:00:00 2 days 12:00:00 2 days 4 days 05:36:31.701948 05:40:07.68
  1162. 1 mon 15 days 2 mons 15 days 2 mons 4 mons 7 days 00:15:51.058425 7 days 02:03:50.4
  1163. 1 mon 2 days 04:00:00 16 days 02:00:00 2 mons 4 days 08:00:00 16 days 02:00:00 2 mons 4 days 08:00:00 4 mons 15 days 28:24:59.745978 7 days 14:20:47.04