# 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