123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404 |
- # Copyright 2015 - 2019 The Cockroach Authors. All rights reserved.
- # Copyright Materialize, Inc. and contributors. All rights reserved.
- #
- # Use of this software is governed by the Business Source License
- # included in the LICENSE file at the root of this repository.
- #
- # As of the Change Date specified in that file, in accordance with
- # the Business Source License, use of this software will be governed
- # by the Apache License, Version 2.0.
- #
- # This file is derived from the logic test suite in CockroachDB. The
- # original file was retrieved on June 10, 2019 from:
- #
- # https://github.com/cockroachdb/cockroach/blob/d2f7fbf5dd1fc1a099bbad790a2e1f7c60a66cc3/pkg/sql/logictest/testdata/logic_test/datetime
- #
- # The original source code is subject to the terms of the Apache
- # 2.0 license, a copy of which can be found in the LICENSE file at the
- # root of this repository.
- mode cockroach
- simple conn=mz_system,user=mz_system
- ALTER SYSTEM SET unsafe_enable_table_keys = true
- ----
- COMPLETE 0
- statement ok
- CREATE TABLE t (
- a TIMESTAMP PRIMARY KEY,
- b DATE,
- c INTERVAL,
- UNIQUE (b),
- UNIQUE (c),
- FAMILY (a),
- FAMILY (b),
- FAMILY (c)
- )
- statement ok
- INSERT INTO t VALUES
- ('2015-08-30 03:34:45.34567', '2015-08-30', '34h2s'),
- ('2015-08-25 04:45:45.53453', '2015-08-25', '2h45m2s234ms'),
- ('2015-08-29 23:10:09.98763', '2015-08-29', '234h45m2s234ms')
- # Spot-check date math.
- query T
- SELECT b + '6 month' from t order by a desc
- ----
- 2016-02-29 00:00:00 +0000 UTC
- 2016-02-29 00:00:00 +0000 UTC
- 2016-02-25 00:00:00 +0000 UTC
- query TTT
- SELECT * FROM t WHERE a = '2015-08-25 04:45:45.53453+01:00'::timestamp
- ----
- 2015-08-25 04:45:45.53453 +0000 +0000 2015-08-25 00:00:00 +0000 +0000 02:45:02.234
- # insert duplicate value with different time zone offset
- statement error duplicate key value \(a\)=\('2015-08-30 03:34:45\.34567\+00:00'\) violates unique constraint "primary"
- INSERT INTO t VALUES
- ('2015-08-30 03:34:45.34567-07:00', '2015-08-31', '35h2s')
- # Check that time/date/interval representations outside of the index are okay.
- statement ok
- CREATE TABLE u (
- a BIGINT PRIMARY KEY,
- b TIMESTAMP,
- c TIMESTAMPTZ,
- d DATE,
- e INTERVAL
- )
- statement ok
- INSERT INTO u VALUES
- (123, '2015-08-30 03:34:45.34567', '2015-08-30 03:34:45.34567', '2015-08-30', '34h2s'),
- (234, '2015-08-25 04:45:45.53453-02:00', '2015-08-25 04:45:45.53453-02:00', '2015-08-25', '2h45m2s234ms')
- statement ok
- SET TIME ZONE -5
- query TTT
- SELECT DATE '2000-01-01', DATE '2000-12-31', DATE '1993-05-16'
- ----
- 2000-01-01 00:00:00 +0000 +0000 2000-12-31 00:00:00 +0000 +0000 1993-05-16 00:00:00 +0000 +0000
- statement ok
- INSERT INTO u VALUES
- (345, '2015-08-29 23:10:09.98763', '2015-08-29 23:10:09.98763', '2015-08-29', '234h45m2s234ms'),
- (456, '2015-08-29 23:10:09.98763 UTC', '2015-08-29 23:10:09.98763 UTC', '2015-08-29', '234h45m2s234ms')
- query ITTTT
- SELECT * FROM u ORDER BY a
- ----
- 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
- 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
- 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
- 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
- statement ok
- SET TIME ZONE UTC
- query ITTTT
- SELECT * FROM u ORDER BY a
- ----
- 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
- 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
- 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
- 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
- statement ok
- SET TIME ZONE -5
- query TTTT
- SELECT max(b), max(c), max(d), max(e) FROM u
- ----
- 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
- query TTTT
- SELECT min(b), min(c), min(d), min(e) FROM u
- ----
- 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
- query BB
- SELECT now() < now() + '1m'::interval, now() <= now() + '1m'::interval
- ----
- true true
- query BB
- SELECT now() + '1m'::interval > now(), now() + '1m'::interval >= now()
- ----
- true true
- # Date sentinel values.
- query TTT
- SELECT 'epoch'::date, 'infinity'::date, '-infinity'::date
- ----
- 1970-01-01 00:00:00 +0000 +0000 infinity -infinity
- # Date edge cases.
- statement error year value 0 is out of range
- SELECT '0000-01-01'::date
- query TTTTT
- SELECT '4714-11-24 BC'::date, '5874897-12-31'::date, '2000-01-01'::date, '0001-01-01'::date, '0001-12-13 BC'::date
- ----
- -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
- # Also test as strings because lib/pq marshals the previous results to
- # time.Times, which don't stringify the same.
- query TTTTT
- 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
- ----
- 4714-11-24 BC 5874897-12-31 2000-01-01 0001-01-01 0001-12-13 BC
- statement error date is out of range
- SELECT '4714-11-24 BC'::date - 1
- statement error date is out of range
- SELECT '5874897-12-31'::date + 1
- query TT
- SELECT ('4714-11-24 BC'::date + 1)::string, ('5874897-12-31'::date - 1)::string
- ----
- 4714-11-25 BC 5874897-12-30
- query TTTT
- SELECT 'infinity'::date + 1, 'infinity'::date - 1, '-infinity'::date + 1, '-infinity'::date - 1
- ----
- infinity infinity -infinity -infinity
- statement error cannot subtract infinite dates
- SELECT 'infinity'::date - 'infinity'::date
- query I
- SELECT '5874897-12-31'::date - '4714-11-24 BC'::date
- ----
- 2147483493
- # TIMESTAMP/DATE builtins.
- query T
- SELECT age('2001-04-10 22:06:45', '1957-06-13')
- ----
- 384190:06:45
- query B
- SELECT age('1957-06-13') - age(now(), '1957-06-13') = interval '0s'
- ----
- true
- query B
- SELECT now() - timestamp '2015-06-13' > interval '100h'
- ----
- true
- query TT
- SELECT now()::timestamp - now(), now() - now()::timestamp
- ----
- 00:00:00 00:00:00
- query BB
- SELECT now() = now()::timestamp, now()::timestamp = now()
- ----
- true true
- query BB
- SELECT now()::timestamp < now(), now() < now()::timestamp
- ----
- false false
- query BB
- SELECT now()::timestamp <= now(), now() <= now()::timestamp
- ----
- true true
- query B
- SELECT current_date - current_date() = 0
- ----
- true
- query B
- SELECT now() - current_timestamp() = interval '0s'
- ----
- true
- query B
- SELECT now() - current_timestamp = interval '0s'
- ----
- true
- query B
- SELECT now() - statement_timestamp() < interval '10s'
- ----
- true
- query B
- SELECT clock_timestamp() - statement_timestamp() < interval '10s'
- ----
- true
- query B
- SELECT now() - transaction_timestamp() = interval '0s'
- ----
- true
- statement ok
- BEGIN TRANSACTION
- statement ok
- CREATE TABLE kv (
- k CHAR PRIMARY KEY,
- v TIMESTAMPTZ
- )
- statement ok
- INSERT INTO kv (k,v) VALUES ('a', transaction_timestamp())
- query T
- SELECT k FROM kv
- ----
- a
- query T
- SELECT k FROM kv where v = transaction_timestamp()
- ----
- a
- statement ok
- COMMIT TRANSACTION
- # Changing timezones changes the output of current_date().
- statement ok
- RESET TIME ZONE
- query BBB
- SELECT
- d = tz, d = t, d = n
- FROM
- (
- SELECT
- current_date()::DATE AS d,
- current_date()::TIMESTAMPTZ::DATE AS tz,
- current_date()::TIMESTAMP::DATE AS t,
- now():::DATE AS n
- )
- ----
- true true true
- query B
- SELECT now() - current_date()::timestamptz < interval '24h10s'
- ----
- true
- statement ok
- SET TIME ZONE 48
- query B
- SELECT now() - current_date()::timestamptz < interval '24h10s'
- ----
- true
- query BBB
- SELECT
- d = tz, d = t, d = n
- FROM
- (
- SELECT
- current_date()::DATE AS d,
- current_date()::TIMESTAMPTZ::DATE AS tz,
- current_date()::TIMESTAMP::DATE AS t,
- now():::DATE AS n
- )
- ----
- true true true
- statement ok
- RESET TIME ZONE
- # Check that the current_timestamp, now and transaction_timestamp are the same.
- # Test that the transaction_timestamp can differ from the statement_timestamp.
- # Check that the transaction_timestamp changes with each transaction.
- # We use, SELECT * FROM kv, to insert delays of more than a microsecond.
- statement ok
- BEGIN;
- INSERT INTO kv (k,v) VALUES ('b', transaction_timestamp());
- SELECT * FROM kv;
- INSERT INTO kv (k,v) VALUES ('c', transaction_timestamp());
- SELECT * FROM kv;
- INSERT INTO kv (k,v) VALUES ('d', current_timestamp());
- SELECT * FROM kv;
- INSERT INTO kv (k,v) VALUES ('e', current_timestamp());
- SELECT * FROM kv;
- INSERT INTO kv (k,v) VALUES ('f', now());
- SELECT * FROM kv;
- INSERT INTO kv (k,v) VALUES ('g', now());
- SELECT * FROM kv;
- INSERT INTO kv (k,v) VALUES ('h', statement_timestamp());
- SELECT * FROM kv;
- COMMIT;
- SELECT * FROM kv;
- BEGIN;
- SELECT * FROM KV;
- INSERT INTO kv (k,v) VALUES ('i', transaction_timestamp());
- COMMIT
- query I
- SELECT count(DISTINCT (v)) FROM kv
- ----
- 4
- # Test that transaction_timestamp() is consistent in transaction
- # spanning multiple batches of statements.
- statement ok
- DELETE FROM kv
- statement ok
- BEGIN;
- INSERT INTO kv (k,v) VALUES ('a', transaction_timestamp());
- SELECT * FROM kv
- statement ok
- INSERT INTO kv (k,v) VALUES ('b', transaction_timestamp());
- SELECT * FROM kv;
- COMMIT
- statement ok
- BEGIN;
- SELECT * FROM KV;
- INSERT INTO kv (k,v) VALUES ('c', transaction_timestamp());
- COMMIT
- query I
- SELECT count(DISTINCT (v)) FROM kv
- ----
- 2
- statement ok
- DROP TABLE kv
- statement ok
- CREATE TABLE kv (
- k INT PRIMARY KEY,
- v DECIMAL
- )
- # Test that cluster_logical_timestamp() is consistent in transactions
- # spanning multiple batches of statements.
- statement ok
- BEGIN;
- INSERT INTO kv (k,v) VALUES (1, cluster_logical_timestamp());
- SELECT * FROM kv
- statement ok
- INSERT INTO kv (k,v) VALUES (2, cluster_logical_timestamp());
- SELECT * FROM kv;
- COMMIT
- statement ok
- BEGIN;
- SELECT * FROM kv;
- INSERT INTO kv (k,v) VALUES (3, cluster_logical_timestamp());
- COMMIT
- query I
- SELECT count(DISTINCT (v)) FROM kv
- ----
- 2
- statement ok
- DELETE FROM kv
- statement ok
- CREATE TABLE m (mints DECIMAL)
- statement ok
- INSERT INTO m VALUES (cluster_logical_timestamp())
- # Test that cluster_logical_timestamp() is monotonic in transaction order
- statement ok
- INSERT INTO kv (k,v) VALUES (1, cluster_logical_timestamp()-(select mints from m));
- SELECT * FROM kv
- statement ok
- INSERT INTO kv (k,v) VALUES (2, cluster_logical_timestamp()-(select mints from m));
- SELECT * FROM kv
- statement ok
- INSERT INTO kv (k,v) VALUES (3, cluster_logical_timestamp()-(select mints from m));
- SELECT * FROM kv
- statement ok
- INSERT INTO kv (k,v) VALUES (4, cluster_logical_timestamp()-(select mints from m));
- SELECT * FROM kv
- statement ok
- INSERT INTO kv (k,v) VALUES (5, cluster_logical_timestamp()-(select mints from m));
- SELECT * FROM kv
- statement ok
- INSERT INTO kv (k,v) VALUES (6, cluster_logical_timestamp()-(select mints from m));
- SELECT * FROM kv
- query I
- SELECT k FROM kv ORDER BY v
- ----
- 1
- 2
- 3
- 4
- 5
- 6
- statement ok
- SET TIME ZONE UTC
- statement ok
- CREATE TABLE ex (
- k BIGINT PRIMARY KEY,
- element STRING,
- input TIMESTAMPTZ,
- extract_result INT,
- date_trunc_result TIMESTAMPTZ
- )
- statement ok
- INSERT INTO ex VALUES
- (1, 'year', '2001-04-10 12:04:59', 2001, '2001-01-01 00:00:00'),
- (2, 'year', '2016-02-10 19:46:33.306157519', 2016, '2016-01-01 00:00:00'),
- (3, 'years', '2016-02-10 19:46:33.306157519', 2016, '2016-01-01 00:00:00'),
- (4, 'quarter', '2001-04-10 12:04:59', 2, '2001-04-01 00:00:00'),
- (5, 'quarter', '2016-02-10 19:46:33.306157519', 1, '2016-01-01 00:00:00'),
- (6, 'quarter', '2016-05-10 19:46:33.306157519', 2, '2016-04-01 00:00:00'),
- (7, 'quarter', '2016-09-09 19:46:33.306157519', 3, '2016-07-01 00:00:00'),
- (8, 'quarter', '2016-10-10 19:46:33.306157519', 4, '2016-10-01 00:00:00'),
- (9, 'month', '2001-04-10 12:04:59', 4, '2001-04-01 00:00:00'),
- (10, 'month', '2016-02-10 19:46:33.306157519', 2, '2016-02-01 00:00:00'),
- (11, 'months', '2016-02-10 19:46:33.306157519', 2, '2016-02-01 00:00:00'),
- (12, 'week', '2001-04-10 12:04:59', 15, '2001-04-08 00:00:00'),
- (13, 'weeks', '2001-01-05 12:04:59', 1, '2000-12-31 00:00:00'),
- (14, 'day', '2001-04-10 12:04:59', 10, '2001-04-10 00:00:00'),
- (15, 'day', '2016-02-10 19:46:33.306157519', 10, '2016-02-10 00:00:00'),
- (16, 'days', '2016-02-10 19:46:33.306157519', 10, '2016-02-10 00:00:00'),
- (17, 'dayofweek', '2001-04-10 12:04:59', 2, null),
- (18, 'dow', '2001-04-12 12:04:59', 4, null),
- (19, 'dayofyear', '2001-04-10 12:04:59', 100, null),
- (20, 'doy', '2001-04-12 12:04:59', 102, null),
- (21, 'epoch', '1970-01-02 00:00:01.000001', 86401, null),
- (22, 'epoch', '1970-01-02 00:00:01.000001-04', 100801, null),
- (23, 'epoch', '2001-04-10 12:04:59', 986904299, null),
- (24, 'hour', '2001-04-10 12:04:59', 12, '2001-04-10 12:00:00'),
- (25, 'hour', '2016-02-10 19:46:33.306157519', 19, '2016-02-10 19:00:00'),
- (26, 'hour', '2016-02-10 19:46:33.306157519-04', 23, '2016-02-10 19:00:00-04'),
- (27, 'hours', '2016-02-10 19:46:33.306157519', 19, '2016-02-10 19:00:00'),
- (28, 'hours', '2016-02-10 19:46:33.306157519-04', 23, '2016-02-10 19:00:00-04'),
- (29, 'minute', '2001-04-10 12:04:59', 4, '2001-04-10 12:04:00'),
- (30, 'minute', '2016-02-10 19:46:33.306157519', 46, '2016-02-10 19:46:00'),
- (31, 'minutes', '2016-02-10 19:46:33.306157519', 46, '2016-02-10 19:46:00'),
- (32, 'second', '2001-04-10 12:04:59.234', 59, '2001-04-10 12:04:59'),
- (33, 'second', '2016-02-10 19:46:33.306157519', 33, '2016-02-10 19:46:33'),
- (34, 'seconds', '2016-02-10 19:46:33.306157519', 33, '2016-02-10 19:46:33'),
- (35, 'millisecond', '2001-04-10 12:04:59.234567', 234, '2001-04-10 12:04:59.234'),
- (36, 'millisecond', '2016-02-10 19:46:33.306157519', 306, '2016-02-10 19:46:33.306'),
- (37, 'milliseconds', '2016-02-10 19:46:33.306157519', 306, '2016-02-10 19:46:33.306'),
- (38, 'microsecond', '2001-04-10 12:04:59.34565423', 345654, '2001-04-10 12:04:59.345654'),
- (39, 'microsecond', '2016-02-10 19:46:33.306157519', 306158, '2016-02-10 19:46:33.306158'),
- (40, 'microseconds', '2016-02-10 19:46:33.306157519', 306158, '2016-02-10 19:46:33.306158')
- query IBI
- SELECT k, extract(element, input::timestamp) = extract_result, extract(element, input::timestamp) FROM ex ORDER BY k
- ----
- 1 true 2001
- 2 true 2016
- 3 true 2016
- 4 true 2
- 5 true 1
- 6 true 2
- 7 true 3
- 8 true 4
- 9 true 4
- 10 true 2
- 11 true 2
- 12 true 15
- 13 true 1
- 14 true 10
- 15 true 10
- 16 true 10
- 17 true 2
- 18 true 4
- 19 true 100
- 20 true 102
- 21 true 86401
- 22 true 100801
- 23 true 986904299
- 24 true 12
- 25 true 19
- 26 true 23
- 27 true 19
- 28 true 23
- 29 true 4
- 30 true 46
- 31 true 46
- 32 true 59
- 33 true 33
- 34 true 33
- 35 true 234
- 36 true 306
- 37 true 306
- 38 true 345654
- 39 true 306158
- 40 true 306158
- query error extract\(\): unsupported timespan: nansecond
- SELECT extract(nansecond from '2001-04-10 12:04:59.34565423'::timestamp)
- query error unknown unit "nanosecond"
- SELECT INTERVAL '1 nanosecond';
- query error unknown unit "ns"
- SELECT INTERVAL '1 ns';
- query IBI
- SELECT k, extract(element, input::timestamptz) = extract_result, extract(element, input::timestamptz) FROM ex ORDER BY k
- ----
- 1 true 2001
- 2 true 2016
- 3 true 2016
- 4 true 2
- 5 true 1
- 6 true 2
- 7 true 3
- 8 true 4
- 9 true 4
- 10 true 2
- 11 true 2
- 12 true 15
- 13 true 1
- 14 true 10
- 15 true 10
- 16 true 10
- 17 true 2
- 18 true 4
- 19 true 100
- 20 true 102
- 21 true 86401
- 22 true 100801
- 23 true 986904299
- 24 true 12
- 25 true 19
- 26 true 23
- 27 true 19
- 28 true 23
- 29 true 4
- 30 true 46
- 31 true 46
- 32 true 59
- 33 true 33
- 34 true 33
- 35 true 234
- 36 true 306
- 37 true 306
- 38 true 345654
- 39 true 306158
- 40 true 306158
- query error extract\(\): unsupported timespan: nansecond
- SELECT extract(nansecond from '2001-04-10 12:04:59.34565423'::timestamptz)
- query I
- SELECT extract(hour from '2016-02-10 19:46:33.306157519-04'::timestamptz)
- ----
- 19
- query I
- SELECT extract(hours from '2016-02-10 19:46:33.306157519-04'::timestamptz)
- ----
- 19
- query IBT
- SELECT k, date_trunc(element, input::timestamp) = date_trunc_result, date_trunc(element, input::timestamp)::string
- FROM ex WHERE date_trunc_result IS NOT NULL ORDER BY k
- ----
- 1 true 2001-01-01 00:00:00+00:00
- 2 true 2016-01-01 00:00:00+00:00
- 3 true 2016-01-01 00:00:00+00:00
- 4 true 2001-04-01 00:00:00+00:00
- 5 true 2016-01-01 00:00:00+00:00
- 6 true 2016-04-01 00:00:00+00:00
- 7 true 2016-07-01 00:00:00+00:00
- 8 true 2016-10-01 00:00:00+00:00
- 9 true 2001-04-01 00:00:00+00:00
- 10 true 2016-02-01 00:00:00+00:00
- 11 true 2016-02-01 00:00:00+00:00
- 12 true 2001-04-08 00:00:00+00:00
- 13 true 2000-12-31 00:00:00+00:00
- 14 true 2001-04-10 00:00:00+00:00
- 15 true 2016-02-10 00:00:00+00:00
- 16 true 2016-02-10 00:00:00+00:00
- 24 true 2001-04-10 12:00:00+00:00
- 25 true 2016-02-10 19:00:00+00:00
- 26 true 2016-02-10 23:00:00+00:00
- 27 true 2016-02-10 19:00:00+00:00
- 28 true 2016-02-10 23:00:00+00:00
- 29 true 2001-04-10 12:04:00+00:00
- 30 true 2016-02-10 19:46:00+00:00
- 31 true 2016-02-10 19:46:00+00:00
- 32 true 2001-04-10 12:04:59+00:00
- 33 true 2016-02-10 19:46:33+00:00
- 34 true 2016-02-10 19:46:33+00:00
- 35 true 2001-04-10 12:04:59.234+00:00
- 36 true 2016-02-10 19:46:33.306+00:00
- 37 true 2016-02-10 19:46:33.306+00:00
- 38 true 2001-04-10 12:04:59.345654+00:00
- 39 true 2016-02-10 19:46:33.306158+00:00
- 40 true 2016-02-10 19:46:33.306158+00:00
- query IBT
- SELECT k, date_trunc(element, input::timestamptz) = date_trunc_result, date_trunc(element, input::timestamptz)::string
- FROM ex WHERE date_trunc_result IS NOT NULL ORDER BY k
- ----
- 1 true 2001-01-01 00:00:00+00:00
- 2 true 2016-01-01 00:00:00+00:00
- 3 true 2016-01-01 00:00:00+00:00
- 4 true 2001-04-01 00:00:00+00:00
- 5 true 2016-01-01 00:00:00+00:00
- 6 true 2016-04-01 00:00:00+00:00
- 7 true 2016-07-01 00:00:00+00:00
- 8 true 2016-10-01 00:00:00+00:00
- 9 true 2001-04-01 00:00:00+00:00
- 10 true 2016-02-01 00:00:00+00:00
- 11 true 2016-02-01 00:00:00+00:00
- 12 true 2001-04-08 00:00:00+00:00
- 13 true 2000-12-31 00:00:00+00:00
- 14 true 2001-04-10 00:00:00+00:00
- 15 true 2016-02-10 00:00:00+00:00
- 16 true 2016-02-10 00:00:00+00:00
- 24 true 2001-04-10 12:00:00+00:00
- 25 true 2016-02-10 19:00:00+00:00
- 26 true 2016-02-10 23:00:00+00:00
- 27 true 2016-02-10 19:00:00+00:00
- 28 true 2016-02-10 23:00:00+00:00
- 29 true 2001-04-10 12:04:00+00:00
- 30 true 2016-02-10 19:46:00+00:00
- 31 true 2016-02-10 19:46:00+00:00
- 32 true 2001-04-10 12:04:59+00:00
- 33 true 2016-02-10 19:46:33+00:00
- 34 true 2016-02-10 19:46:33+00:00
- 35 true 2001-04-10 12:04:59.234+00:00
- 36 true 2016-02-10 19:46:33.306+00:00
- 37 true 2016-02-10 19:46:33.306+00:00
- 38 true 2001-04-10 12:04:59.345654+00:00
- 39 true 2016-02-10 19:46:33.306158+00:00
- 40 true 2016-02-10 19:46:33.306158+00:00
- query T
- SELECT date_trunc('hour', '2016-02-10 19:46:33.306157519-04'::timestamptz)::string
- ----
- 2016-02-10 19:00:00-04:00
- query T
- SELECT date_trunc('hours', '2016-02-10 19:46:33.306157519-04'::timestamptz)::string
- ----
- 2016-02-10 19:00:00-04:00
- query IBT
- SELECT k, date_trunc(element, input::date) = date_trunc_result::date, date_trunc(element, input::date)::string
- FROM ex WHERE date_trunc_result IS NOT NULL ORDER BY k
- ----
- 1 true 2001-01-01 00:00:00+00:00
- 2 true 2016-01-01 00:00:00+00:00
- 3 true 2016-01-01 00:00:00+00:00
- 4 true 2001-04-01 00:00:00+00:00
- 5 true 2016-01-01 00:00:00+00:00
- 6 true 2016-04-01 00:00:00+00:00
- 7 true 2016-07-01 00:00:00+00:00
- 8 true 2016-10-01 00:00:00+00:00
- 9 true 2001-04-01 00:00:00+00:00
- 10 true 2016-02-01 00:00:00+00:00
- 11 true 2016-02-01 00:00:00+00:00
- 12 true 2001-04-08 00:00:00+00:00
- 13 true 2000-12-31 00:00:00+00:00
- 14 true 2001-04-10 00:00:00+00:00
- 15 true 2016-02-10 00:00:00+00:00
- 16 true 2016-02-10 00:00:00+00:00
- 24 true 2001-04-10 00:00:00+00:00
- 25 true 2016-02-10 00:00:00+00:00
- 26 true 2016-02-10 00:00:00+00:00
- 27 true 2016-02-10 00:00:00+00:00
- 28 true 2016-02-10 00:00:00+00:00
- 29 true 2001-04-10 00:00:00+00:00
- 30 true 2016-02-10 00:00:00+00:00
- 31 true 2016-02-10 00:00:00+00:00
- 32 true 2001-04-10 00:00:00+00:00
- 33 true 2016-02-10 00:00:00+00:00
- 34 true 2016-02-10 00:00:00+00:00
- 35 true 2001-04-10 00:00:00+00:00
- 36 true 2016-02-10 00:00:00+00:00
- 37 true 2016-02-10 00:00:00+00:00
- 38 true 2001-04-10 00:00:00+00:00
- 39 true 2016-02-10 00:00:00+00:00
- 40 true 2016-02-10 00:00:00+00:00
- query T
- SELECT (timestamp '2016-02-10 19:46:33.306157519')::string
- ----
- 2016-02-10 19:46:33.306158+00:00
- query T
- SELECT (timestamptz '2016-02-10 19:46:33.306157519')::string
- ----
- 2016-02-10 19:46:33.306158+00:00
- # Test SET TIME ZONE
- # default time zone of UTC
- query T
- SELECT '2015-08-25 05:45:45.53453'::timestamp
- ----
- 2015-08-25 05:45:45.53453 +0000 +0000
- query T
- SELECT '2015-08-25 05:45:45.53453'::timestamp
- ----
- 2015-08-25 05:45:45.53453 +0000 +0000
- statement ok
- SET TIME ZONE 'Europe/Rome'
- query error pq: unimplemented: timestamp abbreviations not supported
- SELECT '2015-08-25 05:45:45.53453 CET'::timestamptz WHERE false
- statement ok
- SET TIME ZONE +1
- query error pq: unimplemented: timestamp abbreviations not supported
- SELECT '2015-08-25 05:45:45.53453 CET'::timestamptz WHERE false
- query T
- SELECT '2015-08-25 05:45:45.53453'::timestamp
- ----
- 2015-08-25 05:45:45.53453 +0000 +0000
- query T
- SELECT '2015-08-25 05:45:45.53453'::timestamptz
- ----
- 2015-08-25 05:45:45.53453 +0100 +0100
- query T
- SELECT '2015-08-25 05:45:45-01:00'::timestamp
- ----
- 2015-08-25 05:45:45 +0000 +0000
- query T
- SELECT '2015-08-25 05:45:45-01:00'::timestamp::timestamptz
- ----
- 2015-08-25 05:45:45 +0100 +0100
- query T
- SELECT '2015-08-25 05:45:45-01:00'::timestamptz::timestamp
- ----
- 2015-08-25 07:45:45 +0000 +0000
- query T
- SELECT '2015-08-25 05:45:45-01:00'::timestamptz
- ----
- 2015-08-25 07:45:45 +0100 +0100
- # alias test: TIMEZONE instead of TIME ZONE
- statement ok
- SET TIMEZONE = +2
- query error pq: unimplemented: timestamp abbreviations not supported
- SELECT '2015-08-25 05:45:45.53453 CET'::timestamptz WHERE false
- query T
- SELECT '2015-08-25 05:45:45.53453'::timestamp
- ----
- 2015-08-25 05:45:45.53453 +0000 +0000
- query T
- SELECT '2015-08-25 05:45:45.53453'::timestamptz
- ----
- 2015-08-25 05:45:45.53453 +0200 +0200
- query T
- SELECT '2015-08-25 05:45:45-01:00'::timestamp
- ----
- 2015-08-25 05:45:45 +0000 +0000
- query T
- SELECT '2015-08-25 05:45:45-01:00'::timestamp::timestamptz
- ----
- 2015-08-25 05:45:45 +0200 +0200
- query T
- SELECT '2015-08-25 05:45:45-01:00'::timestamptz::timestamp
- ----
- 2015-08-25 08:45:45 +0000 +0000
- query T
- SELECT '2015-08-25 05:45:45-01:00'::timestamptz
- ----
- 2015-08-25 08:45:45 +0200 +0200
- statement ok
- SET TIME ZONE -5
- query T
- SELECT '2015-08-24 23:45:45.53453'::timestamp
- ----
- 2015-08-24 23:45:45.53453 +0000 +0000
- query T
- SELECT '2015-08-24 23:45:45.53453'::timestamptz
- ----
- 2015-08-24 23:45:45.53453 -0500 -0500
- query T
- SELECT '2015-08-24 23:45:45.53453 UTC'::timestamp
- ----
- 2015-08-24 23:45:45.53453 +0000 +0000
- query T
- SELECT '2015-08-24 23:45:45.53453 UTC'::timestamptz
- ----
- 2015-08-24 18:45:45.53453 -0500 -0500
- query T
- SELECT '2015-08-24 23:45:45.53453-02:00'::timestamp
- ----
- 2015-08-24 23:45:45.53453 +0000 +0000
- query T
- SELECT '2015-08-24 23:45:45.53453-02:00'::timestamptz
- ----
- 2015-08-24 20:45:45.53453 -0500 -0500
- query T
- SELECT '2015-08-24 23:45:45.53453-05:00'::timestamptz
- ----
- 2015-08-24 23:45:45.53453 -0500 -0500
- query T
- SELECT '2015-08-24 23:45:45.534 -02:00'::timestamp
- ----
- 2015-08-24 23:45:45.534 +0000 +0000
- query T
- SELECT '2015-08-24 23:45:45.534 -02:00'::timestamptz
- ----
- 2015-08-24 20:45:45.534 -0500 -0500
- query T
- SELECT '2015-08-25 05:45:45-01:00'::timestamp::timestamptz
- ----
- 2015-08-25 05:45:45 -0500 -0500
- query T
- SELECT '2015-08-25 05:45:45-01:00'::timestamptz::timestamp
- ----
- 2015-08-25 01:45:45 +0000 +0000
- # using Eastern instead of fixed -5 should handle DST.
- statement ok
- SET TIME ZONE 'America/New_York'
- query T
- SELECT '2015-08-25 05:45:45-01:00'::timestamp::timestamptz
- ----
- 2015-08-25 05:45:45 -0400 -0400
- query T
- SELECT '2015-08-25 05:45:45-01:00'::timestamptz::timestamp
- ----
- 2015-08-25 02:45:45 +0000 +0000
- statement error cannot find time zone "foobar"
- SET TIME ZONE 'foobar'
- statement ok
- SET TIME ZONE default
- query T
- SELECT '2015-08-24 21:45:45.53453'::timestamptz
- ----
- 2015-08-24 21:45:45.53453 +0000 UTC
- statement ok
- SET TIME ZONE local
- query T
- SELECT '2015-08-24 21:45:45.53453'::timestamptz
- ----
- 2015-08-24 21:45:45.53453 +0000 UTC
- statement ok
- SET TIME ZONE 'DEFAULT'
- query T
- SELECT '2015-08-24 21:45:45.53453'::timestamptz
- ----
- 2015-08-24 21:45:45.53453 +0000 UTC
- statement ok
- SET TIME ZONE ''
- query T
- SELECT '2015-08-24 21:45:45.53453'::timestamptz
- ----
- 2015-08-24 21:45:45.53453 +0000 UTC
- statement ok
- SET TIME ZONE INTERVAL '-7h'
- query T
- SELECT '2015-08-24 21:45:45.53453'::timestamp
- ----
- 2015-08-24 21:45:45.53453 +0000 +0000
- query T
- SELECT '2015-08-24 21:45:45.53453'::timestamptz
- ----
- 2015-08-24 21:45:45.53453 -0700 -0700
- statement ok
- SET TIME ZONE -7.5
- query T
- SELECT '2015-08-24 21:45:45.53453'::timestamp
- ----
- 2015-08-24 21:45:45.53453 +0000 +0000
- query T
- SELECT '2015-08-24 21:45:45.53453'::timestamptz
- ----
- 2015-08-24 21:45:45.53453 -0730 -0730
- query T
- SELECT '2015-08-24 21:45:45.53453 UTC'::timestamptz
- ----
- 2015-08-24 14:15:45.53453 -0730 -0730
- statement ok
- SET TIME ZONE LOCAL
- query T
- SELECT '2015-08-25 04:45:45.53453'::timestamp
- ----
- 2015-08-25 04:45:45.53453 +0000 +0000
- statement ok
- SET TIME ZONE DEFAULT
- query T
- SELECT '2015-08-25 04:45:45.53453'::timestamp
- ----
- 2015-08-25 04:45:45.53453 +0000 +0000
- # reset for what follows.
- statement ok
- SET TIME ZONE 'UTC'
- # Check that casting from a timestamp to a date and vice versa
- # uses the time zone.
- query TTTT
- SELECT b, b::date, c, c::date FROM u WHERE a = 123
- ----
- 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
- query T
- SELECT d::timestamp FROM u WHERE a = 123
- ----
- 2015-08-30 00:00:00 +0000 +0000
- statement ok
- SET TIME ZONE -5
- query TTTT
- SELECT b, b::date, c, c::date FROM u WHERE a = 123
- ----
- 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
- query T
- SELECT d::timestamp FROM u WHERE a = 123
- ----
- 2015-08-30 00:00:00 +0000 +0000
- statement ok
- SET TIME ZONE UTC
- statement ok
- CREATE TABLE tz (
- a INT PRIMARY KEY,
- b TIMESTAMP,
- c TIMESTAMPTZ,
- d TIMESTAMPTZ
- )
- query TTBTTTB
- SHOW COLUMNS FROM tz
- ----
- a INT8 false NULL · {primary} false
- b TIMESTAMP true NULL · {} false
- c TIMESTAMPTZ true NULL · {} false
- d TIMESTAMPTZ true NULL · {} false
- statement ok
- INSERT INTO tz VALUES
- (1, timestamp '2015-08-30 03:34:45', timestamptz '2015-08-30 03:34:45', timestamptz '2015-08-30 03:34:45'),
- (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')
- statement ok
- SET TIME ZONE -2
- query ITT
- SELECT a, b, c FROM tz ORDER BY a
- ----
- 1 2015-08-30 03:34:45 +0000 +0000 2015-08-30 01:34:45 -0200 -0200
- 2 2015-08-30 03:34:45 +0000 +0000 2015-08-30 00:34:45 -0200 -0200
- query TTTT
- SELECT b + interval '1m', interval '1m' + b, c + interval '1m', interval '1m' + c FROM tz WHERE a = 1
- ----
- 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
- query I
- SELECT a FROM tz WHERE c = d
- ----
- 1
- query I rowsort
- SELECT a FROM tz WHERE c <= d
- ----
- 1
- 2
- query I
- SELECT a FROM tz WHERE c < d
- ----
- 2
- query I rowsort
- SELECT a FROM tz WHERE b = c::timestamp
- ----
- query I rowsort
- SELECT a FROM tz WHERE c = d::timestamp
- ----
- 1
- # reset for what follows.
- statement ok
- SET TIME ZONE 'UTC'
- statement ok
- SET TIME ZONE -5
- query T
- SHOW TIME ZONE
- ----
- -5
- statement ok
- SET TIME ZONE INTERVAL '+04:00' HOUR TO MINUTE
- query T
- SELECT '2015-08-24 21:45:45.53453'::timestamptz
- ----
- 2015-08-24 21:45:45.53453 +0400 +0400
- statement ok
- SET TIME ZONE INTERVAL '-04:00' MINUTE TO SECOND
- query T
- SELECT '2015-08-24 21:45:45.53453'::timestamptz
- ----
- 2015-08-24 21:45:45.53453 -0400 -0400
- # alias test: TIMEZONE instead of TIME ZONE
- statement ok
- SET TIMEZONE TO INTERVAL '+05:00' HOUR TO MINUTE
- query T
- SELECT '2015-08-24 21:45:45.53453'::timestamptz
- ----
- 2015-08-24 21:45:45.53453 +0500 +0500
- statement ok
- SET TIMEZONE TO INTERVAL '-05:00' MINUTE TO SECOND
- query T
- SELECT '2015-08-24 21:45:45.53453'::timestamptz
- ----
- 2015-08-24 21:45:45.53453 -0500 -0500
- statement ok
- SET TIME ZONE 0
- query T
- SHOW TIME ZONE
- ----
- 0
- query T
- SELECT DATE '1999-01-01' + INTERVAL '4 minutes'
- ----
- 1999-01-01 00:04:00 +0000 UTC
- query T
- SELECT INTERVAL '4 minutes' + DATE '1999-01-01'
- ----
- 1999-01-01 00:04:00 +0000 UTC
- query T
- SELECT DATE '1999-01-01' - INTERVAL '4 minutes'
- ----
- 1998-12-31 23:56:00 +0000 UTC
- query B
- SELECT DATE '1999-01-02' < TIMESTAMPTZ '1999-01-01'
- ----
- false
- query B
- SELECT DATE '1999-01-02' < TIMESTAMP '1999-01-01'
- ----
- false
- query B
- SELECT DATE '1999-01-02' <= TIMESTAMPTZ '1999-01-01'
- ----
- false
- query B
- SELECT DATE '1999-01-02' <= TIMESTAMP '1999-01-01'
- ----
- false
- query B
- SELECT DATE '1999-01-02' <= TIMESTAMPTZ '1999-01-02'
- ----
- true
- query B
- SELECT DATE '1999-01-02' <= TIMESTAMP '1999-01-02'
- ----
- true
- query B
- SELECT DATE '1999-01-02' > TIMESTAMPTZ '1999-01-01'
- ----
- true
- query B
- SELECT DATE '1999-01-02' > TIMESTAMP '1999-01-01'
- ----
- true
- query B
- SELECT DATE '1999-01-02' >= TIMESTAMPTZ '1999-01-01'
- ----
- true
- query B
- SELECT DATE '1999-01-02' >= TIMESTAMP '1999-01-01'
- ----
- true
- query B
- SELECT DATE '1999-01-02' = TIMESTAMPTZ '1999-01-01'
- ----
- false
- query B
- SELECT DATE '1999-01-01' = TIMESTAMP '1999-01-01'
- ----
- true
- ## Test parsing of unitless interval constants with field specifiers
- query TTTTT
- SELECT INTERVAL '5', INTERVAL '5' SECOND, INTERVAL '5' MINUTE TO SECOND, INTERVAL '5' HOUR TO SECOND, INTERVAL '5' DAY TO SECOND;
- ----
- 00:00:05 00:00:05 00:00:05 00:00:05 00:00:05
- query TTT
- SELECT INTERVAL '5' MINUTE, INTERVAL '5' HOUR TO MINUTE, INTERVAL '5' DAY TO MINUTE;
- ----
- 00:05:00 00:05:00 00:05:00
- query TT
- SELECT INTERVAL '5' HOUR, INTERVAL '5' DAY TO HOUR;
- ----
- 05:00:00 05:00:00
- query T
- SELECT INTERVAL '5' DAY;
- ----
- 5 days
- query TT
- SELECT INTERVAL '5' MONTH, INTERVAL '5' YEAR TO MONTH;
- ----
- 5 mons 5 mons
- query T
- SELECT INTERVAL '5' YEAR
- ----
- 5 years
- ## Test truncation via field specifiers
- query TTTT
- 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;
- ----
- 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
- query TTT
- 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;
- ----
- 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
- query TT
- SELECT INTERVAL '1-2 3 4:5:6' HOUR, INTERVAL '1-2 3 4:5:6' DAY TO HOUR
- ----
- 1 year 2 mons 3 days 04:00:00 1 year 2 mons 3 days 04:00:00
- query T
- SELECT INTERVAL '1-2 3 4:5:6' DAY;
- ----
- 1 year 2 mons 3 days
- query TT
- SELECT INTERVAL '1-2 3 4:5:6' MONTH, INTERVAL '1-2 3 4:5:6' YEAR TO MONTH;
- ----
- 1 year 2 mons 1 year 2 mons
- query T
- SELECT INTERVAL '1-2 3 4:5:6' YEAR
- ----
- 1 year
- # Test regression, database-issues#6155. When a built-in returns a datum that does not
- # match the function signature, distSQL will panic on table scans.
- statement ok
- CREATE TABLE topics (
- ts TIMESTAMP,
- tstz TIMESTAMPTZ,
- "date" DATE
- );
- statement ok
- INSERT INTO topics VALUES (
- '2017-12-05 04:04:04.913231+00:00',
- '2017-12-05 04:04:04.913231+00:00',
- '2017-12-05 04:04:04.913231+00:00'
- );
- query T
- SELECT date_trunc('month', ts) AS date_trunc_month_created_at FROM "topics";
- ----
- 2017-12-01 00:00:00 +0000 +0000
- query T
- SELECT date_trunc('month', tstz) AS date_trunc_month_created_at FROM "topics";
- ----
- 2017-12-01 00:00:00 +0000 UTC
- query T
- SELECT date_trunc('month', "date") AS date_trunc_month_created_at FROM "topics";
- ----
- 2017-12-01 00:00:00 +0000 UTC
- # Test negative years to ensure they can round-trip through the parser.
- # Also ensure that we don't trigger any of the "convenience" rules.
- # Update: dates now have a much more limited range such that the original
- # dates from this issue are no longer possible to express.
- subtest regression_35255
- statement error date is out of range
- SELECT '-56325279622-12-26'::DATE
- statement error date is out of range
- SELECT '-5632-12-26'::DATE
- query T
- SELECT '-563-12-26'::DATE
- ----
- -0563-12-26 00:00:00 +0000 +0000
- query T
- SELECT '-56-12-26'::DATE
- ----
- -0056-12-26 00:00:00 +0000 +0000
- query T
- SELECT '-5-12-26'::DATE
- ----
- -0005-12-26 00:00:00 +0000 +0000
- # Update: dates now have a much more limited range such that the original
- # dates from this issue are no longer possible to express.
- subtest regression_36146
- statement error out of range
- WITH
- w (c) AS (VALUES (NULL), (NULL))
- SELECT
- '1971-03-18'::DATE + 300866802885581286
- FROM
- w
- ORDER BY
- c
- statement error out of range
- SELECT
- '1971-03-18'::DATE + 300866802885581286
- # Update: dates now have a much more limited range such that the original
- # dates from this issue are no longer possible to express.
- subtest regression_36557
- statement error out of range
- SELECT 7133080445639580613::INT8 + '1977-11-03'::DATE
- statement error out of range
- SELECT '-239852040018-04-28':::DATE
- statement error out of range
- SELECT(7133080445639580613::INT8 + '1977-11-03'::DATE) = '-239852040018-04-28':::DATE
- subtest interval_math
- query TTTTTTT
- SELECT
- i,
- i / 2::INT8,
- i * 2::INT8,
- i / 2::FLOAT8,
- i * 2::FLOAT8,
- i / .2362::FLOAT8,
- i * .2362::FLOAT8
- FROM
- (
- VALUES
- ('1 day'::INTERVAL),
- ('1 month'::INTERVAL),
- ('1 hour'::INTERVAL),
- ('1 month 2 days 4 hours'::INTERVAL)
- )
- AS v (i)
- ORDER BY
- i
- ----
- 01:00:00 00:30:00 02:00:00 00:30:00 02:00:00 04:14:01.320914 00:14:10.32
- 1 day 12:00:00 2 days 12:00:00 2 days 4 days 05:36:31.701948 05:40:07.68
- 1 mon 15 days 2 mons 15 days 2 mons 4 mons 7 days 00:15:51.058425 7 days 02:03:50.4
- 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
|