316 lines
6.4 KiB
SQL
316 lines
6.4 KiB
SQL
# name: test/sql/function/timestamp/make_date.test
|
|
# description: Test the MAKE_DATE/TIME/TIMESTAMP functions
|
|
# group: [timestamp]
|
|
|
|
statement ok
|
|
PRAGMA enable_verification
|
|
|
|
#
|
|
# Dates
|
|
#
|
|
statement ok
|
|
CREATE TABLE IF NOT EXISTS dates (d date);
|
|
|
|
statement ok
|
|
INSERT INTO dates VALUES
|
|
(NULL),
|
|
('-99999-01-01'),
|
|
('-1993-08-14'),
|
|
('1992-01-01 (BC)'),
|
|
('-1992-01-01'),
|
|
('0044-03-15 (BC)'),
|
|
('0000-01-01'),
|
|
('0020-01-01'),
|
|
('1992-01-01'),
|
|
('1992-01-20'),
|
|
('1992-02-01'),
|
|
('1992-02-02'),
|
|
('1992-02-12'),
|
|
('1992-02-20'),
|
|
('1992-03-03'),
|
|
('1992-03-20'),
|
|
('1992-04-20'),
|
|
('1992-05-05'),
|
|
('1992-05-20'),
|
|
('1992-06-20'),
|
|
('1992-07-20'),
|
|
('1992-08-20'),
|
|
('1992-09-20'),
|
|
('1992-10-20'),
|
|
('1992-11-20'),
|
|
('1992-12-02'),
|
|
('1992-12-20'),
|
|
('1993-03-20'),
|
|
('1993-03-03'),
|
|
('1994-05-05'),
|
|
('1993-08-14'),
|
|
('2000-12-31'),
|
|
('2000-02-12'),
|
|
('2001-01-01'),
|
|
('2007-01-01'),
|
|
('2008-01-01'),
|
|
('2008-01-02'),
|
|
('2008-02-01'),
|
|
('2020-08-09'),
|
|
('2020-08-10'),
|
|
('2020-09-27'),
|
|
('99999-01-01')
|
|
|
|
query I
|
|
SELECT d
|
|
FROM (SELECT d, make_date(year(d), month(d), day(d)) md FROM dates) tbl
|
|
WHERE md IS DISTINCT FROM d;
|
|
----
|
|
|
|
query I
|
|
SELECT d
|
|
FROM (SELECT d, make_date(date_part(['year', 'month', 'day'], d)) md FROM dates) tbl
|
|
WHERE md IS DISTINCT FROM d;
|
|
----
|
|
|
|
# Null parts
|
|
query I
|
|
SELECT md
|
|
FROM (SELECT make_date(NULL, month(d), day(d)) md FROM dates) t
|
|
WHERE md IS NOT NULL
|
|
----
|
|
|
|
query I
|
|
SELECT md
|
|
FROM (SELECT make_date(year(d), NULL, day(d)) md FROM dates) t
|
|
WHERE md IS NOT NULL
|
|
----
|
|
|
|
query I
|
|
SELECT md
|
|
FROM (SELECT make_date(year(d), month(d), NULL) md FROM dates) t
|
|
WHERE md IS NOT NULL
|
|
----
|
|
|
|
# round trip
|
|
query I
|
|
SELECT *
|
|
FROM dates
|
|
WHERE d <> make_date((d - date '1970-01-01')::INT)
|
|
----
|
|
|
|
# Constants
|
|
query IIII
|
|
SELECT
|
|
make_date(2021, 12, 30),
|
|
make_date(NULL, 12, 30),
|
|
make_date(2021, NULL, 30),
|
|
make_date(2021, 12, NULL)
|
|
;
|
|
----
|
|
2021-12-30 NULL NULL NULL
|
|
|
|
#
|
|
# Timestamps
|
|
#
|
|
statement ok
|
|
CREATE TABLE timestamps(ts TIMESTAMP)
|
|
|
|
statement ok
|
|
INSERT INTO timestamps VALUES
|
|
('1001-03-15 (BC) 20:38:40'),
|
|
('0044-03-15 (BC) 20:38:40'),
|
|
('1962-07-31 12:20:48.123456'),
|
|
('1969-01-01 01:03:20.45432'),
|
|
('1992-01-01 01:01:01.400'),
|
|
('1992-01-01 01:01:02.200'),
|
|
('1992-01-01 01:01:02.400'),
|
|
('1993-08-14 08:22:33.42'),
|
|
('2001-04-20 14:42:11.0'),
|
|
('2001-04-20 14:42:11.123'),
|
|
('2004-01-31 12:00:00.000050'),
|
|
('2004-01-31 12:00:00.050'),
|
|
('2004-02-01 12:00:00.000050'),
|
|
('2004-02-01 12:00:00.050'),
|
|
('2004-02-29 13:05:47.123456'),
|
|
('2008-01-01 00:00:01.5'),
|
|
('2008-01-01 00:00:01.594'),
|
|
('2008-01-01 00:00:01.794'),
|
|
('2008-01-01 00:00:01.88926'),
|
|
('2008-01-01 00:00:01.894'),
|
|
('2008-01-01 00:00:01.98926'),
|
|
('2008-01-01 00:00:01.99926'),
|
|
('2008-01-01 00:00:11.1'),
|
|
('2019-01-06 04:03:02.123456'),
|
|
('2019-01-06 04:03:02.5'),
|
|
('2020-01-01 00:00:01.88926'),
|
|
('2020-12-31 21:25:58.745232'),
|
|
('2021-04-15 14:55:17.915'),
|
|
('2021-04-15 14:55:17.915000'),
|
|
('2021-05-02 12:11:49.5'),
|
|
('2021-12-01 13:54:48.123456'),
|
|
('1993-08-14 08:22:33'),
|
|
(NULL)
|
|
;
|
|
|
|
query II
|
|
SELECT ts, mts
|
|
FROM (SELECT ts, make_timestamp(year(ts), month(ts), day(ts), hour(ts), minute(ts), microsecond(ts) / 1000000.0) mts
|
|
FROM timestamps) t
|
|
WHERE mts IS DISTINCT FROM ts;
|
|
----
|
|
|
|
# Null parts
|
|
query I
|
|
SELECT md
|
|
FROM (
|
|
SELECT make_timestamp(NULL, month(ts), day(ts), hour(ts), minute(ts), microsecond(ts) / 1000000.0) md
|
|
FROM timestamps) t
|
|
WHERE md IS NOT NULL
|
|
----
|
|
|
|
query I
|
|
SELECT md
|
|
FROM (
|
|
SELECT make_timestamp(year(ts), NULL, day(ts), hour(ts), minute(ts), microsecond(ts) / 1000000.0) md
|
|
FROM timestamps) t
|
|
WHERE md IS NOT NULL
|
|
----
|
|
|
|
query I
|
|
SELECT md
|
|
FROM (
|
|
SELECT make_timestamp(year(ts), month(ts), NULL, hour(ts), minute(ts), microsecond(ts) / 1000000.0) md
|
|
FROM timestamps) t
|
|
WHERE md IS NOT NULL
|
|
----
|
|
|
|
query I
|
|
SELECT md
|
|
FROM (
|
|
SELECT make_timestamp(year(ts), month(ts), day(ts), NULL, minute(ts), microsecond(ts) / 1000000.0) md
|
|
FROM timestamps) t
|
|
WHERE md IS NOT NULL
|
|
----
|
|
|
|
query I
|
|
SELECT md
|
|
FROM (
|
|
SELECT make_timestamp(year(ts), month(ts), day(ts), hour(ts), NULL, microsecond(ts) / 1000000.0) md
|
|
FROM timestamps) t
|
|
WHERE md IS NOT NULL
|
|
----
|
|
|
|
query I
|
|
SELECT md
|
|
FROM (
|
|
SELECT make_timestamp(year(ts), month(ts), day(ts), hour(ts), minute(ts), NULL) md
|
|
FROM timestamps) t
|
|
WHERE md IS NOT NULL
|
|
----
|
|
|
|
# Constants
|
|
query IIIIIII
|
|
SELECT
|
|
make_timestamp(2021, 12, 30, 12, 41, 46.123456),
|
|
make_timestamp(NULL, 12, 30, 12, 41, 46.123456),
|
|
make_timestamp(2021, NULL, 30, 12, 41, 46.123456),
|
|
make_timestamp(2021, 12, NULL, 12, 41, 46.123456),
|
|
make_timestamp(2021, 12, 30, NULL, 41, 46.123456),
|
|
make_timestamp(2021, 12, 30, 12, NULL, 46.123456),
|
|
make_timestamp(2021, 12, 30, 12, 41, NULL)
|
|
;
|
|
----
|
|
2021-12-30 12:41:46.123456 NULL NULL NULL NULL NULL NULL
|
|
|
|
# From microseconds
|
|
query II
|
|
SELECT make_timestamp(0), make_timestamp(1684509234845000);
|
|
----
|
|
1970-01-01 00:00:00 2023-05-19 15:13:54.845
|
|
|
|
statement error
|
|
SELECT make_timestamp(9223372036854775807); -- Infinity
|
|
----
|
|
Conversion Error: Timestamp microseconds out of range
|
|
|
|
# From nanoseconds
|
|
query II
|
|
SELECT make_timestamp_ns(0), make_timestamp_ns(1684509234845000123);
|
|
----
|
|
1970-01-01 00:00:00 2023-05-19 15:13:54.845000123
|
|
|
|
# Maximum value for make_timestamp_ns().
|
|
query I
|
|
SELECT make_timestamp_ns(9223372036854775806);
|
|
----
|
|
2262-04-11 23:47:16.854775806
|
|
|
|
statement error
|
|
SELECT make_timestamp_ns(9223372036854775807); -- Infinity
|
|
----
|
|
Conversion Error: Timestamp microseconds out of range
|
|
|
|
#
|
|
# Times
|
|
#
|
|
statement ok
|
|
CREATE TABLE times(t TIME)
|
|
|
|
statement ok
|
|
INSERT INTO times VALUES
|
|
(NULL),
|
|
('00:00:01'),
|
|
('00:01:20'),
|
|
('01:00:00'),
|
|
('02:30:01'),
|
|
('06:30:00'),
|
|
('12:00:30.1234'),
|
|
('12:20:48.123456'),
|
|
('12:11:49.5'),
|
|
('14:55:17.915000'),
|
|
('21:15:22'),
|
|
('20:08:10.001'),
|
|
('20:08:10.33'),
|
|
('20:08:10.998'),
|
|
('21:25:58.745232')
|
|
;
|
|
|
|
query II
|
|
SELECT t, mt
|
|
FROM (SELECT t, make_time(hour(t), minute(t), microsecond(t) / 1000000.0) mt
|
|
FROM times) tbl
|
|
WHERE mt IS DISTINCT FROM t;
|
|
----
|
|
|
|
# Null parts
|
|
query I
|
|
SELECT md
|
|
FROM (SELECT make_time(NULL, minute(d), microsecond(d) / 1000000.0) md FROM dates) t
|
|
WHERE md IS NOT NULL
|
|
----
|
|
|
|
query I
|
|
SELECT md
|
|
FROM (SELECT make_time(hour(d), NULL, microsecond(d) / 1000000.0) md FROM dates) t
|
|
WHERE md IS NOT NULL
|
|
----
|
|
|
|
query I
|
|
SELECT md
|
|
FROM (SELECT make_time(hour(d), minute(d), NULL) md FROM dates) t
|
|
WHERE md IS NOT NULL
|
|
----
|
|
|
|
# Constants
|
|
query IIII
|
|
SELECT
|
|
make_time(12, 41, 46.123456),
|
|
make_time(NULL, 41, 46.123456),
|
|
make_time(12, NULL, 46.123456),
|
|
make_time(12, 41, NULL)
|
|
;
|
|
----
|
|
12:41:46.123456 NULL NULL NULL
|
|
|
|
# Overflow
|
|
statement error
|
|
SELECT make_timestamp(294247, 1, 10, 4, 0, 54.775807);
|
|
----
|
|
Conversion Error: Date and time not in timestamp range
|