should be it

This commit is contained in:
2025-10-24 19:21:19 -05:00
parent a4b23fc57c
commit f09560c7b1
14047 changed files with 3161551 additions and 1 deletions

View File

@@ -0,0 +1,23 @@
# name: test/sql/function/date/date_add.test
# description: Test date_add/date_sub
# group: [date]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE dates(d DATE);
statement ok
INSERT INTO dates VALUES (DATE '1992-01-01')
# date_add, bigquery
query I
SELECT DATE_ADD(DATE '2008-12-25', INTERVAL 5 DAY) AS five_days_later;
----
2008-12-30 00:00:00
query I
SELECT DATE_ADD(TIMESTAMP '2008-12-25 00:00:00', INTERVAL 5 DAY) AS five_days_later;
----
2008-12-30 00:00:00

View File

@@ -0,0 +1,201 @@
# name: test/sql/function/date/date_part_stats.test
# description: Test date part stats on empty table
# group: [date]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE dates(d DATE);
# test stats propagation from empty table
query I
SELECT EXTRACT(year FROM d) FROM dates;
----
query I
SELECT EXTRACT(month FROM d) FROM dates;
----
query I
SELECT EXTRACT(day FROM d) FROM dates;
----
query I
SELECT EXTRACT(decade FROM d) FROM dates;
----
query I
SELECT EXTRACT(century FROM d) FROM dates;
----
query I
SELECT EXTRACT(millennium FROM d) FROM dates;
----
query I
SELECT EXTRACT(microseconds FROM d) FROM dates;
----
query I
SELECT EXTRACT(milliseconds FROM d) FROM dates;
----
query I
SELECT EXTRACT(second FROM d) FROM dates;
----
query I
SELECT EXTRACT(minute FROM d) FROM dates;
----
query I
SELECT EXTRACT(hour FROM d) FROM dates;
----
query I
SELECT EXTRACT(epoch FROM d) FROM dates;
----
query I
SELECT EXTRACT(dow FROM d) FROM dates;
----
query I
SELECT EXTRACT(isodow FROM d) FROM dates;
----
query I
SELECT EXTRACT(week FROM d) FROM dates;
----
query I
SELECT EXTRACT(doy FROM d) FROM dates;
----
query I
SELECT EXTRACT(quarter FROM d) FROM dates;
----
query I
SELECT YEARWEEK(d) FROM dates;
----
query I
SELECT DAYOFMONTH(d) FROM dates;
----
query I
SELECT WEEKDAY(d) FROM dates;
----
query I
SELECT WEEKOFYEAR(d) FROM dates;
----
statement ok
PRAGMA disable_verification
statement ok
INSERT INTO dates VALUES (DATE '1992-01-01'), (DATE '2000-12-31');
query I
SELECT stats(EXTRACT(YEAR FROM d)) FROM dates LIMIT 1;
----
<REGEX>:.*1992.*2000.*
query I
SELECT stats(EXTRACT(month FROM d)) FROM dates LIMIT 1;
----
<REGEX>:.*1.*12.*
query I
SELECT stats(EXTRACT(day FROM d)) FROM dates LIMIT 1;
----
<REGEX>:.*1.*31.*
query I
SELECT stats(EXTRACT(decade FROM d)) FROM dates LIMIT 1;
----
<REGEX>:.*199.*200.*
query I
SELECT stats(EXTRACT(century FROM d)) FROM dates LIMIT 1;
----
<REGEX>:.*20.*20.*
query I
SELECT stats(EXTRACT(millennium FROM d)) FROM dates LIMIT 1;
----
<REGEX>:.*2.*2.*
query I
SELECT stats(EXTRACT(microseconds FROM d)) FROM dates LIMIT 1;
----
<REGEX>:.*0.*60000000.*
query I
SELECT stats(EXTRACT(milliseconds FROM d)) FROM dates LIMIT 1;
----
<REGEX>:.*0.*60000.*
query I
SELECT stats(EXTRACT(second FROM d)) FROM dates LIMIT 1;
----
<REGEX>:.*0.*60.*
query I
SELECT stats(EXTRACT(minute FROM d)) FROM dates LIMIT 1;
----
<REGEX>:.*0.*60.*
query I
SELECT stats(EXTRACT(hour FROM d)) FROM dates LIMIT 1;
----
<REGEX>:.*0.*24.*
query I
SELECT stats(EXTRACT(dow FROM d)) FROM dates LIMIT 1;
----
<REGEX>:.*0.*6.*
query I
SELECT stats(EXTRACT(isodow FROM d)) FROM dates LIMIT 1;
----
<REGEX>:.*1.*7.*
query I
SELECT stats(EXTRACT(week FROM d)) FROM dates LIMIT 1;
----
<REGEX>:.*1.*54.*
query I
SELECT stats(EXTRACT(doy FROM d)) FROM dates LIMIT 1;
----
<REGEX>:.*1.*366.*
query I
SELECT stats(EXTRACT(quarter FROM d)) FROM dates LIMIT 1;
----
<REGEX>:.*1.*4.*
query I
SELECT stats(YEARWEEK(d)) FROM dates LIMIT 1;
----
<REGEX>:.*199201.*200052.*
query I
SELECT stats(DAYOFMONTH(d)) FROM dates LIMIT 1;
----
<REGEX>:.*1.*31.*
query I
SELECT stats(WEEKDAY(d)) FROM dates LIMIT 1;
----
<REGEX>:.*0.*6.*
query I
SELECT stats(WEEKOFYEAR(d)) FROM dates LIMIT 1;
----
<REGEX>:.*1.*54.*

View File

@@ -0,0 +1,28 @@
# name: test/sql/function/date/date_trunc_4202.test
# description: Issue #4202: Suspect behavior when comparing dates and timestamps
# group: [date]
statement ok
PRAGMA enable_verification
statement ok
create table t1 (date timestamp);
statement ok
insert into t1 values ('2016-12-16T00:00:00.000Z');
statement ok
insert into t1 values ('2020-02-17T23:59:59.998Z');
statement ok
insert into t1 values ('2020-02-17T23:59:59.999Z');
statement ok
insert into t1 values ('2020-02-18T00:00:00.000Z');
query I
select * from t1 WHERE (date_trunc('DAY', T1.date) < ('2020-02-17T23:59:59.999Z'::timestamp)) ORDER BY 1;
----
2016-12-16 00:00:00
2020-02-17 23:59:59.998
2020-02-17 23:59:59.999

View File

@@ -0,0 +1,18 @@
# name: test/sql/function/date/date_trunc_stats.test
# description: Test date part stats on empty table
# group: [date]
statement ok
PRAGMA enable_verification
statement ok
CREATE table T1(A0 TIMESTAMP)
statement ok
SELECT date_trunc('DAY', A0) FROM T1
# Statistics typing for DATE => TIMESTAMP
statement error
SELECT datetrunc('milliseconds', DATE '-2005205-7-28');
----
<REGEX>:.*Conversion Error.*not in timestamp range.*

View File

@@ -0,0 +1,634 @@
# name: test/sql/function/date/test_date_part.test
# description: DATE_PART test
# group: [date]
statement ok
SET default_null_order='nulls_first';
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE dates(d DATE, s VARCHAR);
statement ok
INSERT INTO dates VALUES
('1992-01-01', 'year'),
('1992-03-03', 'month'),
('1992-05-05', 'day'),
('2022-01-01', 'isoyear'),
('044-03-15 (BC)', 'millennium'),
('infinity', 'century'),
('-infinity', 'decade'),
(NULL, 'weekday'),
;
statement ok
CREATE TABLE specifiers (specifier VARCHAR);
foreach specifier era millennium century decade year quarter month day week weekday isodow dayofyear isoyear yearweek
statement ok
INSERT INTO specifiers VALUES ('${partcode}');
endloop
# test date_part with different combinations of constant/non-constant columns
query I
SELECT date_part(NULL::VARCHAR, NULL::TIMESTAMP) FROM dates;
----
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
query I
SELECT date_part(s, NULL::TIMESTAMP) FROM dates;
----
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
# dates
query I
SELECT date_part(NULL, d) FROM dates;
----
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
query I
SELECT date_part(s, DATE '1992-01-01') FROM dates;
----
1992
1
1
1992
2
20
199
3
query I
SELECT date_part('year', d) FROM dates;
----
1992
1992
1992
2022
-43
NULL
NULL
NULL
query I
SELECT date_part('isoyear', d) FROM dates;
----
1992
1992
1992
2021
-43
NULL
NULL
NULL
query I
SELECT date_part(s, d) FROM dates;
----
1992
3
5
2021
-1
NULL
NULL
NULL
query I
SELECT date_part('era', d) FROM dates;
----
1
1
1
1
0
NULL
NULL
NULL
query I
SELECT date_part('julian', d) FROM dates;
----
2448623
2448685
2448748
2459581
1705428
NULL
NULL
NULL
statement error
SELECT date_part('timezone', d) FROM dates;
----
statement error
SELECT date_part('timezone_hour', d) FROM dates;
----
statement error
SELECT date_part('timezone_minute', d) FROM dates;
----
# timestamps
query I
SELECT date_part(NULL, d::TIMESTAMP) FROM dates;
----
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
query I
SELECT date_part(s, TIMESTAMP '1992-01-01') FROM dates;
----
1992
1
1
1992
2
20
199
3
query I
SELECT date_part('year', d::TIMESTAMP) FROM dates;
----
1992
1992
1992
2022
-43
NULL
NULL
NULL
query I
SELECT date_part('isoyear', d::TIMESTAMP) FROM dates;
----
1992
1992
1992
2021
-43
NULL
NULL
NULL
query I
SELECT date_part(s, d::TIMESTAMP) FROM dates;
----
1992
3
5
2021
-1
NULL
NULL
NULL
query I
SELECT date_part('era', d::TIMESTAMP) FROM dates;
----
1
1
1
1
0
NULL
NULL
NULL
query I
SELECT date_part('timezone', d::TIMESTAMP) FROM dates;
----
0
0
0
0
0
NULL
NULL
NULL
query I
SELECT date_part('timezone_hour', d::TIMESTAMP) FROM dates;
----
0
0
0
0
0
NULL
NULL
NULL
query I
SELECT date_part('timezone_minute', d::TIMESTAMP) FROM dates;
----
0
0
0
0
0
NULL
NULL
NULL
# Cache upper bound
query I
select date_part('year', dt::DATE) * 10,
from generate_series('2050-01-01'::date,'2051-12-31'::date,interval 1 day) t(dt)
where dt = '2050-12-31';
----
20500
#
# Two-argument timezone
#
# Normalise to +00:00, add interval, then set offset
query I
select timezone(interval '4 minute', '12:15:37.123456-08'::TIMETZ);
----
20:19:37.123456+00:04
# last_day
query TTT
SELECT LAST_DAY(DATE '1900-02-12'), LAST_DAY(DATE '1992-02-12'), LAST_DAY(DATE '2000-02-12');
----
1900-02-28 1992-02-29 2000-02-29
query T
SELECT LAST_DAY(d) FROM dates;
----
1992-01-31
1992-03-31
1992-05-31
2022-01-31
0044-03-31 (BC)
NULL
NULL
NULL
query T
SELECT LAST_DAY(d::timestamp) FROM dates;
----
1992-01-31
1992-03-31
1992-05-31
2022-01-31
0044-03-31 (BC)
NULL
NULL
NULL
# monthname
query T
SELECT MONTHNAME(d) FROM dates;
----
January
March
May
January
March
NULL
NULL
NULL
# dayname
query T
SELECT DAYNAME(d) FROM dates;
----
Wednesday
Tuesday
Tuesday
Saturday
Friday
NULL
NULL
NULL
# yearweek
query I
SELECT YEARWEEK(d) FROM dates;
----
199201
199210
199219
202152
-4311
NULL
NULL
NULL
# aliases
query I
SELECT DAYOFMONTH(d) FROM dates;
----
1
3
5
1
15
NULL
NULL
NULL
query I
SELECT WEEKDAY(d) FROM dates;
----
3
2
2
6
5
NULL
NULL
NULL
query I
SELECT WEEKOFYEAR(d) FROM dates;
----
1
10
19
52
11
NULL
NULL
NULL
query I
SELECT JULIAN(d) FROM dates;
----
2448623
2448685
2448748
2459581
1705428
NULL
NULL
NULL
query IIIIIIIIIIII
select
date_part('quarter', DATE '1992-01-20'),
date_part('quarter', DATE '1992-02-20'),
date_part('quarter', DATE '1992-03-20'),
date_part('quarter', DATE '1992-04-20'),
date_part('quarter', DATE '1992-05-20'),
date_part('quarter', DATE '1992-06-20'),
date_part('quarter', DATE '1992-07-20'),
date_part('quarter', DATE '1992-08-20'),
date_part('quarter', DATE '1992-09-20'),
date_part('quarter', DATE '1992-10-20'),
date_part('quarter', DATE '1992-11-20'),
date_part('quarter', DATE '1992-12-20')
----
1 1 1 2 2 2 3 3 3 4 4 4
# Correctness: Compare date_part values with scalar values
foreach partcode era millennium century decade year quarter month day week weekday isodow dayofyear isoyear yearweek julian
query III
SELECT d, DATE_PART('${partcode}', d) AS p, ${partcode}(d) AS f
FROM dates
WHERE p IS DISTINCT FROM f;
----
endloop
# Function-only parts
query II
SELECT d, epoch_ns(d)
FROM dates
WHERE d != '0044-03-15 (BC)' OR d IS NULL
ORDER BY ALL;
----
NULL NULL
-infinity NULL
1992-01-01 694224000000000000
1992-03-03 699580800000000000
1992-05-05 705024000000000000
2022-01-01 1640995200000000000
infinity NULL
query II
SELECT d, epoch_us(d) FROM dates ORDER BY ALL;
----
NULL NULL
-infinity NULL
0044-03-15 (BC) -63517824000000000
1992-01-01 694224000000000
1992-03-03 699580800000000
1992-05-05 705024000000000
2022-01-01 1640995200000000
infinity NULL
query II
SELECT d, epoch_ms(d) FROM dates ORDER BY ALL;
----
NULL NULL
-infinity NULL
0044-03-15 (BC) -63517824000000
1992-01-01 694224000000
1992-03-03 699580800000
1992-05-05 705024000000
2022-01-01 1640995200000
infinity NULL
query II
SELECT d, nanosecond(d) FROM dates ORDER BY ALL;
----
NULL NULL
-infinity NULL
0044-03-15 (BC) 0
1992-01-01 0
1992-03-03 0
1992-05-05 0
2022-01-01 0
infinity NULL
#
# Structs
#
# Correctness: Compare struct values with scalar values
foreach partcode era millennium century decade year quarter month day week weekday isodow doy isoyear yearweek
query III
SELECT d, DATE_PART('${partcode}', d) AS p, DATE_PART(['${partcode}'], d) AS st
FROM dates
WHERE p IS DISTINCT FROM st['${partcode}'];
----
endloop
# Date parts
query II
SELECT d, DATE_PART(['year', 'month', 'day', 'epoch'], d) AS parts
FROM dates
ORDER BY 1;
----
NULL NULL
-infinity {'year': NULL, 'month': NULL, 'day': NULL, 'epoch': NULL}
0044-03-15 (BC) {'year': -43, 'month': 3, 'day': 15, 'epoch': -63517824000.0}
1992-01-01 {'year': 1992, 'month': 1, 'day': 1, 'epoch': 694224000.0}
1992-03-03 {'year': 1992, 'month': 3, 'day': 3, 'epoch': 699580800.0}
1992-05-05 {'year': 1992, 'month': 5, 'day': 5, 'epoch': 705024000.0}
2022-01-01 {'year': 2022, 'month': 1, 'day': 1, 'epoch': 1640995200.0}
infinity {'year': NULL, 'month': NULL, 'day': NULL, 'epoch': NULL}
# Year parts
query II
SELECT d, DATE_PART(['era', 'millennium', 'century', 'decade', 'quarter'], d) AS parts
FROM dates
ORDER BY 1;
----
NULL NULL
-infinity {'era': NULL, 'millennium': NULL, 'century': NULL, 'decade': NULL, 'quarter': NULL}
0044-03-15 (BC) {'era': 0, 'millennium': -1, 'century': -1, 'decade': -4, 'quarter': 1}
1992-01-01 {'era': 1, 'millennium': 2, 'century': 20, 'decade': 199, 'quarter': 1}
1992-03-03 {'era': 1, 'millennium': 2, 'century': 20, 'decade': 199, 'quarter': 1}
1992-05-05 {'era': 1, 'millennium': 2, 'century': 20, 'decade': 199, 'quarter': 2}
2022-01-01 {'era': 1, 'millennium': 3, 'century': 21, 'decade': 202, 'quarter': 1}
infinity {'era': NULL, 'millennium': NULL, 'century': NULL, 'decade': NULL, 'quarter': NULL}
# Day parts
query II
SELECT d, DATE_PART(['weekday', 'isodow', 'doy', 'julian'], d) AS parts
FROM dates
ORDER BY 1;
----
NULL NULL
-infinity {'weekday': NULL, 'isodow': NULL, 'doy': NULL, 'julian': NULL}
0044-03-15 (BC) {'weekday': 5, 'isodow': 5, 'doy': 74, 'julian': 1705428.0}
1992-01-01 {'weekday': 3, 'isodow': 3, 'doy': 1, 'julian': 2448623.0}
1992-03-03 {'weekday': 2, 'isodow': 2, 'doy': 63, 'julian': 2448685.0}
1992-05-05 {'weekday': 2, 'isodow': 2, 'doy': 126, 'julian': 2448748.0}
2022-01-01 {'weekday': 6, 'isodow': 6, 'doy': 1, 'julian': 2459581.0}
infinity {'weekday': NULL, 'isodow': NULL, 'doy': NULL, 'julian': NULL}
query I
SELECT DATE_PART(['weekday', 'isodow', 'doy', 'julian'], '2022-01-01'::DATE) AS parts
----
{'weekday': 6, 'isodow': 6, 'doy': 1, 'julian': 2459581.0}
# ISO parts
query II
SELECT d, DATE_PART(['isoyear', 'week', 'yearweek'], d) AS parts
FROM dates
ORDER BY 1;
----
NULL NULL
-infinity {'isoyear': NULL, 'week': NULL, 'yearweek': NULL}
0044-03-15 (BC) {'isoyear': -43, 'week': 11, 'yearweek': -4311}
1992-01-01 {'isoyear': 1992, 'week': 1, 'yearweek': 199201}
1992-03-03 {'isoyear': 1992, 'week': 10, 'yearweek': 199210}
1992-05-05 {'isoyear': 1992, 'week': 19, 'yearweek': 199219}
2022-01-01 {'isoyear': 2021, 'week': 52, 'yearweek': 202152}
infinity {'isoyear': NULL, 'week': NULL, 'yearweek': NULL}
# Selective filtering (Issue #5342)
query II
SELECT d, DATE_PART(['year', 'month', 'day'], d) AS parts
FROM dates
WHERE s = 'day'
ORDER BY 1;
----
1992-05-05 {'year': 1992, 'month': 5, 'day': 5}
# Invalid parts
foreach datepart hour minute second millisecond microsecond timezone timezone_hour timezone_minute
statement error
SELECT d, DATE_PART(['${datepart}'], d) AS parts
FROM dates
ORDER BY 1;
----
not recognized
endloop
statement error
SELECT DATE_PART(['hour', 'minute'], '2023-09-17'::DATE) AS parts
----
not recognized
#
# Infinities
#
# PG returns numeric ±Infinity, but we have to return an integer,
# so instead we return NULL, which is what PG used to do.
foreach datatype DATE TIMESTAMP
foreach special infinity -infinity
# Binary function
query I
SELECT DATE_PART(specifier, '${special}'::${datatype}) AS result
FROM specifiers
WHERE result IS NOT NULL
----
foreach unary year month day decade century millennium quarter dayofweek isodow dayofyear week isoyear era timezone timezone_hour timezone_minute epoch microsecond millisecond second minute hour yearweek dayofmonth weekday weekofyear last_day monthname dayname
# Unary functions
query I
SELECT ${unary}('${special}'::${datatype});
----
NULL
endloop
# Struct entries should be NULL
query I
SELECT DATE_PART(['year', 'month', 'day', 'epoch'], '${special}'::${datatype}) AS parts
----
{'year': NULL, 'month': NULL, 'day': NULL, 'epoch': NULL}
endloop
endloop
query T
WITH cte AS (
SELECT NULL::VARCHAR part
FROM range(1)
)
SELECT date_part(part, TIMESTAMP '2019-01-06 04:03:02')
FROM cte
----
NULL

View File

@@ -0,0 +1,320 @@
# name: test/sql/function/date/test_date_trunc.test
# description: Test date truncate functionality
# group: [date]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE dates(d DATE, s VARCHAR);
statement ok
CREATE TABLE timestamps(d TIMESTAMP, s VARCHAR);
statement ok
INSERT INTO dates VALUES
('1992-12-02', 'year'),
('1993-03-03', 'month'),
('1994-05-05', 'day'),
('2022-01-01', 'isoyear')
;
statement ok
INSERT INTO timestamps VALUES
('-infinity', 'year'),
('1992-02-02 02:02:03', 'millennium'),
('1992-02-02 02:02:03', 'century'),
('1992-02-02 02:02:03', 'decade'),
('1992-02-02 02:02:03', 'year'),
('1992-02-02 02:02:03', 'quarter'),
('1992-02-02 02:02:03', 'month'),
('1992-02-02 02:02:03', 'week'),
('1992-02-02 02:02:03', 'day'),
('1992-02-02 02:02:03', 'hour'),
('1992-02-02 02:02:03', 'minute'),
('1992-02-02 02:02:03', 'second'),
('1992-02-02 02:02:03', 'milliseconds'),
('1992-02-02 02:02:03', 'microseconds'),
('infinity', 'month'),
;
# test date_trunc with different combinations of constant/non-constant columns on both dates and timestamps
query T
SELECT date_trunc(NULL::VARCHAR, NULL::TIMESTAMP) FROM dates;
----
NULL
NULL
NULL
NULL
query T
SELECT date_trunc(s, NULL::TIMESTAMP) FROM dates;
----
NULL
NULL
NULL
NULL
query T
SELECT date_trunc(NULL, d) FROM dates;
----
NULL
NULL
NULL
NULL
query T
SELECT date_trunc(NULL::VARCHAR, NULL::TIMESTAMP) FROM timestamps LIMIT 3;
----
NULL
NULL
NULL
query T
SELECT date_trunc(s, NULL::TIMESTAMP) FROM timestamps LIMIT 3;
----
NULL
NULL
NULL
query T
SELECT date_trunc(NULL, d) FROM timestamps LIMIT 3;
----
NULL
NULL
NULL
# dates should be cast to timestamp
query T
SELECT date_trunc('month', DATE '1992-02-02') FROM dates LIMIT 1;
----
1992-02-01
query T
SELECT date_trunc(s, d) FROM dates;
----
1992-01-01 00:00:00
1993-03-01 00:00:00
1994-05-05 00:00:00
2021-01-04 00:00:00
# Issue #4388: Verify DATE results for all timestamp types
foreach temporal TIMESTAMP TIMESTAMP_MS TIMESTAMP_NS TIMESTAMP_S
foreach datepart day doy dow isodow julian
query I
select date_trunc('${datepart}', '2022-08-15 07:52:55'::${temporal});
----
2022-08-15
endloop
query I
select date_trunc('hour', '2022-08-15 07:52:55'::${temporal});
----
2022-08-15 07:00:00
endloop
# Timestamps should return timestamp type
query T
SELECT date_trunc('minute', TIMESTAMP '1992-02-02 04:03:02') FROM timestamps LIMIT 1;
----
1992-02-02 04:03:00
# Test all truncate operators on timestamps
query T
SELECT date_trunc(s, d) FROM timestamps;
----
-infinity
1000-01-01 00:00:00
1900-01-01 00:00:00
1990-01-01 00:00:00
1992-01-01 00:00:00
1992-01-01 00:00:00
1992-02-01 00:00:00
1992-01-27 00:00:00
1992-02-02 00:00:00
1992-02-02 02:00:00
1992-02-02 02:02:00
1992-02-02 02:02:03
1992-02-02 02:02:03
1992-02-02 02:02:03
infinity
# Redo previous test but with casting to date first
query T
SELECT date_trunc(s, CAST(d as DATE)) FROM timestamps;
----
-infinity
1000-01-01 00:00:00
1900-01-01 00:00:00
1990-01-01 00:00:00
1992-01-01 00:00:00
1992-01-01 00:00:00
1992-02-01 00:00:00
1992-01-27 00:00:00
1992-02-02 00:00:00
1992-02-02 00:00:00
1992-02-02 00:00:00
1992-02-02 00:00:00
1992-02-02 00:00:00
1992-02-02 00:00:00
infinity
# Test week operator special cases
query T
SELECT date_trunc('week', TIMESTAMP '2020-01-01 04:03:02') FROM timestamps LIMIT 1;
----
2019-12-30
query T
SELECT date_trunc('week', TIMESTAMP '2019-01-06 04:03:02') FROM timestamps LIMIT 1;
----
2018-12-31
query T
SELECT date_trunc('yearweek', TIMESTAMP '2020-01-01 04:03:02') FROM timestamps LIMIT 1;
----
2019-12-30
query T
SELECT date_trunc('yearweek', TIMESTAMP '2019-01-06 04:03:02') FROM timestamps LIMIT 1;
----
2018-12-31
# Test quarter operator more thoroughly
query T
SELECT date_trunc('quarter', TIMESTAMP '2020-12-02 04:03:02') FROM timestamps LIMIT 1;
----
2020-10-01
query T
SELECT date_trunc('quarter', TIMESTAMP '2019-01-06 04:03:02') FROM timestamps LIMIT 1;
----
2019-01-01
query T
SELECT date_trunc('millennium', TIMESTAMP '1996-01-06 04:03:02') FROM timestamps LIMIT 1;
----
1000-01-01
query T
SELECT date_trunc('century', TIMESTAMP '2019-01-06 04:03:02') FROM timestamps LIMIT 1;
----
2000-01-01
query T
SELECT date_trunc('decade', TIMESTAMP '2019-01-06 04:03:02') FROM timestamps LIMIT 1;
----
2010-01-01
query T
SELECT date_trunc('year', TIMESTAMP '2019-01-06 04:03:02') FROM timestamps LIMIT 1;
----
2019-01-01
query T
SELECT date_trunc('day', TIMESTAMP '2019-01-06 04:03:02') FROM timestamps LIMIT 1;
----
2019-01-06
query T
SELECT date_trunc('hour', TIMESTAMP '2019-01-06 04:03:02') FROM timestamps LIMIT 1;
----
2019-01-06 04:00:00
query T
SELECT date_trunc('milliseconds', TIMESTAMP '2019-01-06 04:03:02.123456') FROM timestamps LIMIT 1;
----
2019-01-06 04:03:02.123
query T
SELECT date_trunc('microseconds', TIMESTAMP '2019-01-06 04:03:02.123456');
----
2019-01-06 04:03:02.123456
# Synonym for second
query T
SELECT date_trunc('epoch', TIMESTAMP '2019-01-06 04:03:02.5') FROM timestamps LIMIT 1;
----
2019-01-06 04:03:02
query II
SELECT d::DATE, DATE_TRUNC('isoyear', d)::DATE
FROM generate_series('2000-01-01'::TIMESTAMP, '2023-01-01'::TIMESTAMP, INTERVAL 1 YEAR) tbl(d);
----
2000-01-01 1999-01-04
2001-01-01 2001-01-01
2002-01-01 2001-12-31
2003-01-01 2002-12-30
2004-01-01 2003-12-29
2005-01-01 2003-12-29
2006-01-01 2005-01-03
2007-01-01 2007-01-01
2008-01-01 2007-12-31
2009-01-01 2008-12-29
2010-01-01 2008-12-29
2011-01-01 2010-01-04
2012-01-01 2011-01-03
2013-01-01 2012-12-31
2014-01-01 2013-12-30
2015-01-01 2014-12-29
2016-01-01 2014-12-29
2017-01-01 2016-01-04
2018-01-01 2018-01-01
2019-01-01 2018-12-31
2020-01-01 2019-12-30
2021-01-01 2019-12-30
2022-01-01 2021-01-04
2023-01-01 2022-01-03
# Unknown specifier should fail
statement error
SELECT date_trunc('duck', TIMESTAMP '2019-01-06 04:03:02') FROM timestamps LIMIT 1;
----
# Statistics should propagate
statement ok
PRAGMA disable_verification
query I
SELECT stats(date_trunc('year', d)) FROM dates LIMIT 1;
----
[Min: 1992-01-01, Max: 2022-01-01][Has Null: false, Has No Null: true]
query I
SELECT stats(date_trunc('quarter', d)) FROM dates LIMIT 1;
----
[Min: 1992-10-01, Max: 2022-01-01][Has Null: false, Has No Null: true]
query I
SELECT stats(date_trunc('month', d)) FROM dates LIMIT 1;
----
[Min: 1992-12-01, Max: 2022-01-01][Has Null: false, Has No Null: true]
query I
SELECT stats(date_trunc('day', d)) FROM dates LIMIT 1;
----
[Min: 1992-12-02, Max: 2022-01-01][Has Null: false, Has No Null: true]
foreach daypart millennium century decade year quarter month week day
query I
SELECT stats(date_trunc('${daypart}', d)) FROM timestamps LIMIT 1;
----
[Min: -infinity, Max: infinity][Has Null: false, Has No Null: true]
endloop
query T
WITH cte AS (
SELECT NULL::VARCHAR part
FROM range(1)
)
SELECT date_trunc(part, TIMESTAMP '2019-01-06 04:03:02')
FROM cte
----
NULL

View File

@@ -0,0 +1,135 @@
# name: test/sql/function/date/test_extract.test
# description: Extract function
# group: [date]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE dates(i DATE)
statement ok
INSERT INTO dates VALUES ('1993-08-14'), (NULL)
# extract various parts of the date
# year
query I
SELECT EXTRACT(year FROM i) FROM dates
----
1993
NULL
# month
query I
SELECT EXTRACT(month FROM i) FROM dates
----
8
NULL
# quarter
query I
SELECT EXTRACT(quarter FROM i) FROM dates
----
3
NULL
# day
query I
SELECT EXTRACT(day FROM i) FROM dates
----
14
NULL
# decade
query I
SELECT EXTRACT(decade FROM i) FROM dates
----
199
NULL
# century
query I
SELECT EXTRACT(century FROM i) FROM dates
----
20
NULL
# day of the week (Sunday = 0, Saturday = 6)
query I
SELECT EXTRACT(DOW FROM i) FROM dates
----
6
NULL
# day of the year (1 - 365/366)
query I
SELECT EXTRACT(DOY FROM i) FROM dates
----
226
NULL
# epoch
query I
SELECT EXTRACT(epoch FROM i) FROM dates
----
745286400
NULL
# isodow (Monday = 1, Sunday = 7)
query I
SELECT EXTRACT(ISODOW FROM i) FROM dates
----
6
NULL
# week (1-53)
query I
SELECT EXTRACT(WEEK FROM i) FROM dates
----
32
NULL
# yearweek (YYYYWW)
query I
SELECT EXTRACT(YEARWEEK FROM i) FROM dates
----
199332
NULL
# millennium (change of millennium is January 1, X001)
query I
SELECT EXTRACT(millennium FROM i) FROM dates
----
2
NULL
# timestamp variants all give 0 for date
query I
SELECT EXTRACT(second FROM i) FROM dates
----
0
NULL
query I
SELECT EXTRACT(minute FROM i) FROM dates
----
0
NULL
query I
SELECT EXTRACT(hour FROM i) FROM dates
----
0
NULL
query I
SELECT EXTRACT(milliseconds FROM i) FROM dates
----
0
NULL
query I
SELECT EXTRACT(microsecond FROM i) FROM dates
----
0
NULL

View File

@@ -0,0 +1,341 @@
# name: test/sql/function/date/test_extract_edge_cases.test
# description: Extract function edge cases
# group: [date]
# century changes in the year 1
query I
SELECT EXTRACT(century FROM cast('2000-10-10' AS DATE));
----
20
query I
SELECT EXTRACT(century FROM cast('2001-10-10' AS DATE));
----
21
# millennium changes in the year 1
query I
SELECT EXTRACT(millennium FROM cast('2000-10-10' AS DATE));
----
2
query I
SELECT EXTRACT(millennium FROM cast('2001-10-10' AS DATE));
----
3
# check DOW
# start from the epoch and go up/down, every time the day should go up/down
# one as well
query I
SELECT EXTRACT(dow FROM cast('1970-01-01' AS DATE) + 0);
----
4
query I
SELECT EXTRACT(dow FROM cast('1970-01-01' AS DATE) - 0);
----
4
query I
SELECT EXTRACT(dow FROM cast('1970-01-01' AS DATE) + 1);
----
5
query I
SELECT EXTRACT(dow FROM cast('1970-01-01' AS DATE) - 1);
----
3
query I
SELECT EXTRACT(dow FROM cast('1970-01-01' AS DATE) + 2);
----
6
query I
SELECT EXTRACT(dow FROM cast('1970-01-01' AS DATE) - 2);
----
2
query I
SELECT EXTRACT(dow FROM cast('1970-01-01' AS DATE) + 3);
----
0
query I
SELECT EXTRACT(dow FROM cast('1970-01-01' AS DATE) - 3);
----
1
query I
SELECT EXTRACT(dow FROM cast('1970-01-01' AS DATE) + 4);
----
1
query I
SELECT EXTRACT(dow FROM cast('1970-01-01' AS DATE) - 4);
----
0
query I
SELECT EXTRACT(dow FROM cast('1970-01-01' AS DATE) + 5);
----
2
query I
SELECT EXTRACT(dow FROM cast('1970-01-01' AS DATE) - 5);
----
6
query I
SELECT EXTRACT(dow FROM cast('1970-01-01' AS DATE) + 6);
----
3
query I
SELECT EXTRACT(dow FROM cast('1970-01-01' AS DATE) - 6);
----
5
query I
SELECT EXTRACT(dow FROM cast('1793-05-26' AS DATE));
----
0
query I
SELECT EXTRACT(isodow FROM cast('1793-05-26' AS DATE));
----
7
# week numbers are weird
query I
SELECT EXTRACT(week FROM cast('2005-01-01' AS DATE));
----
53
query I
SELECT EXTRACT(week FROM cast('2006-01-01' AS DATE));
----
52
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE));
----
1
query I
SELECT EXTRACT(week FROM cast('2008-01-01' AS DATE));
----
1
query I
SELECT EXTRACT(week FROM cast('2009-01-01' AS DATE));
----
1
query I
SELECT EXTRACT(week FROM cast('2010-01-01' AS DATE));
----
53
# every 7 days the week number should go up by 7
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 0);
----
1
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 7);
----
2
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 14);
----
3
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 21);
----
4
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 28);
----
5
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 35);
----
6
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 42);
----
7
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 49);
----
8
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 56);
----
9
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 63);
----
10
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 70);
----
11
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 77);
----
12
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 84);
----
13
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 91);
----
14
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 98);
----
15
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 105);
----
16
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 112);
----
17
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 119);
----
18
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 126);
----
19
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 133);
----
20
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 140);
----
21
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 147);
----
22
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 154);
----
23
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 161);
----
24
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 168);
----
25
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 175);
----
26
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 182);
----
27
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 189);
----
28
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 196);
----
29
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 203);
----
30
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 210);
----
31
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 217);
----
32
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 224);
----
33
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 231);
----
34
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 238);
----
35
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 245);
----
36
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 252);
----
37
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 259);
----
38
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 266);
----
39
query I
SELECT EXTRACT(week FROM cast('2007-01-01' AS DATE) + 273);
----
40

View File

@@ -0,0 +1,746 @@
# name: test/sql/function/date/test_extract_month.test
# description: Extract month function
# group: [date]
statement ok
PRAGMA enable_verification
query II
select date '1992-01-01' + interval (i) days, month(date '1992-01-01' + interval (i) days) from range(0, 366) tbl(i);
----
1992-01-01 00:00:00 1
1992-01-02 00:00:00 1
1992-01-03 00:00:00 1
1992-01-04 00:00:00 1
1992-01-05 00:00:00 1
1992-01-06 00:00:00 1
1992-01-07 00:00:00 1
1992-01-08 00:00:00 1
1992-01-09 00:00:00 1
1992-01-10 00:00:00 1
1992-01-11 00:00:00 1
1992-01-12 00:00:00 1
1992-01-13 00:00:00 1
1992-01-14 00:00:00 1
1992-01-15 00:00:00 1
1992-01-16 00:00:00 1
1992-01-17 00:00:00 1
1992-01-18 00:00:00 1
1992-01-19 00:00:00 1
1992-01-20 00:00:00 1
1992-01-21 00:00:00 1
1992-01-22 00:00:00 1
1992-01-23 00:00:00 1
1992-01-24 00:00:00 1
1992-01-25 00:00:00 1
1992-01-26 00:00:00 1
1992-01-27 00:00:00 1
1992-01-28 00:00:00 1
1992-01-29 00:00:00 1
1992-01-30 00:00:00 1
1992-01-31 00:00:00 1
1992-02-01 00:00:00 2
1992-02-02 00:00:00 2
1992-02-03 00:00:00 2
1992-02-04 00:00:00 2
1992-02-05 00:00:00 2
1992-02-06 00:00:00 2
1992-02-07 00:00:00 2
1992-02-08 00:00:00 2
1992-02-09 00:00:00 2
1992-02-10 00:00:00 2
1992-02-11 00:00:00 2
1992-02-12 00:00:00 2
1992-02-13 00:00:00 2
1992-02-14 00:00:00 2
1992-02-15 00:00:00 2
1992-02-16 00:00:00 2
1992-02-17 00:00:00 2
1992-02-18 00:00:00 2
1992-02-19 00:00:00 2
1992-02-20 00:00:00 2
1992-02-21 00:00:00 2
1992-02-22 00:00:00 2
1992-02-23 00:00:00 2
1992-02-24 00:00:00 2
1992-02-25 00:00:00 2
1992-02-26 00:00:00 2
1992-02-27 00:00:00 2
1992-02-28 00:00:00 2
1992-02-29 00:00:00 2
1992-03-01 00:00:00 3
1992-03-02 00:00:00 3
1992-03-03 00:00:00 3
1992-03-04 00:00:00 3
1992-03-05 00:00:00 3
1992-03-06 00:00:00 3
1992-03-07 00:00:00 3
1992-03-08 00:00:00 3
1992-03-09 00:00:00 3
1992-03-10 00:00:00 3
1992-03-11 00:00:00 3
1992-03-12 00:00:00 3
1992-03-13 00:00:00 3
1992-03-14 00:00:00 3
1992-03-15 00:00:00 3
1992-03-16 00:00:00 3
1992-03-17 00:00:00 3
1992-03-18 00:00:00 3
1992-03-19 00:00:00 3
1992-03-20 00:00:00 3
1992-03-21 00:00:00 3
1992-03-22 00:00:00 3
1992-03-23 00:00:00 3
1992-03-24 00:00:00 3
1992-03-25 00:00:00 3
1992-03-26 00:00:00 3
1992-03-27 00:00:00 3
1992-03-28 00:00:00 3
1992-03-29 00:00:00 3
1992-03-30 00:00:00 3
1992-03-31 00:00:00 3
1992-04-01 00:00:00 4
1992-04-02 00:00:00 4
1992-04-03 00:00:00 4
1992-04-04 00:00:00 4
1992-04-05 00:00:00 4
1992-04-06 00:00:00 4
1992-04-07 00:00:00 4
1992-04-08 00:00:00 4
1992-04-09 00:00:00 4
1992-04-10 00:00:00 4
1992-04-11 00:00:00 4
1992-04-12 00:00:00 4
1992-04-13 00:00:00 4
1992-04-14 00:00:00 4
1992-04-15 00:00:00 4
1992-04-16 00:00:00 4
1992-04-17 00:00:00 4
1992-04-18 00:00:00 4
1992-04-19 00:00:00 4
1992-04-20 00:00:00 4
1992-04-21 00:00:00 4
1992-04-22 00:00:00 4
1992-04-23 00:00:00 4
1992-04-24 00:00:00 4
1992-04-25 00:00:00 4
1992-04-26 00:00:00 4
1992-04-27 00:00:00 4
1992-04-28 00:00:00 4
1992-04-29 00:00:00 4
1992-04-30 00:00:00 4
1992-05-01 00:00:00 5
1992-05-02 00:00:00 5
1992-05-03 00:00:00 5
1992-05-04 00:00:00 5
1992-05-05 00:00:00 5
1992-05-06 00:00:00 5
1992-05-07 00:00:00 5
1992-05-08 00:00:00 5
1992-05-09 00:00:00 5
1992-05-10 00:00:00 5
1992-05-11 00:00:00 5
1992-05-12 00:00:00 5
1992-05-13 00:00:00 5
1992-05-14 00:00:00 5
1992-05-15 00:00:00 5
1992-05-16 00:00:00 5
1992-05-17 00:00:00 5
1992-05-18 00:00:00 5
1992-05-19 00:00:00 5
1992-05-20 00:00:00 5
1992-05-21 00:00:00 5
1992-05-22 00:00:00 5
1992-05-23 00:00:00 5
1992-05-24 00:00:00 5
1992-05-25 00:00:00 5
1992-05-26 00:00:00 5
1992-05-27 00:00:00 5
1992-05-28 00:00:00 5
1992-05-29 00:00:00 5
1992-05-30 00:00:00 5
1992-05-31 00:00:00 5
1992-06-01 00:00:00 6
1992-06-02 00:00:00 6
1992-06-03 00:00:00 6
1992-06-04 00:00:00 6
1992-06-05 00:00:00 6
1992-06-06 00:00:00 6
1992-06-07 00:00:00 6
1992-06-08 00:00:00 6
1992-06-09 00:00:00 6
1992-06-10 00:00:00 6
1992-06-11 00:00:00 6
1992-06-12 00:00:00 6
1992-06-13 00:00:00 6
1992-06-14 00:00:00 6
1992-06-15 00:00:00 6
1992-06-16 00:00:00 6
1992-06-17 00:00:00 6
1992-06-18 00:00:00 6
1992-06-19 00:00:00 6
1992-06-20 00:00:00 6
1992-06-21 00:00:00 6
1992-06-22 00:00:00 6
1992-06-23 00:00:00 6
1992-06-24 00:00:00 6
1992-06-25 00:00:00 6
1992-06-26 00:00:00 6
1992-06-27 00:00:00 6
1992-06-28 00:00:00 6
1992-06-29 00:00:00 6
1992-06-30 00:00:00 6
1992-07-01 00:00:00 7
1992-07-02 00:00:00 7
1992-07-03 00:00:00 7
1992-07-04 00:00:00 7
1992-07-05 00:00:00 7
1992-07-06 00:00:00 7
1992-07-07 00:00:00 7
1992-07-08 00:00:00 7
1992-07-09 00:00:00 7
1992-07-10 00:00:00 7
1992-07-11 00:00:00 7
1992-07-12 00:00:00 7
1992-07-13 00:00:00 7
1992-07-14 00:00:00 7
1992-07-15 00:00:00 7
1992-07-16 00:00:00 7
1992-07-17 00:00:00 7
1992-07-18 00:00:00 7
1992-07-19 00:00:00 7
1992-07-20 00:00:00 7
1992-07-21 00:00:00 7
1992-07-22 00:00:00 7
1992-07-23 00:00:00 7
1992-07-24 00:00:00 7
1992-07-25 00:00:00 7
1992-07-26 00:00:00 7
1992-07-27 00:00:00 7
1992-07-28 00:00:00 7
1992-07-29 00:00:00 7
1992-07-30 00:00:00 7
1992-07-31 00:00:00 7
1992-08-01 00:00:00 8
1992-08-02 00:00:00 8
1992-08-03 00:00:00 8
1992-08-04 00:00:00 8
1992-08-05 00:00:00 8
1992-08-06 00:00:00 8
1992-08-07 00:00:00 8
1992-08-08 00:00:00 8
1992-08-09 00:00:00 8
1992-08-10 00:00:00 8
1992-08-11 00:00:00 8
1992-08-12 00:00:00 8
1992-08-13 00:00:00 8
1992-08-14 00:00:00 8
1992-08-15 00:00:00 8
1992-08-16 00:00:00 8
1992-08-17 00:00:00 8
1992-08-18 00:00:00 8
1992-08-19 00:00:00 8
1992-08-20 00:00:00 8
1992-08-21 00:00:00 8
1992-08-22 00:00:00 8
1992-08-23 00:00:00 8
1992-08-24 00:00:00 8
1992-08-25 00:00:00 8
1992-08-26 00:00:00 8
1992-08-27 00:00:00 8
1992-08-28 00:00:00 8
1992-08-29 00:00:00 8
1992-08-30 00:00:00 8
1992-08-31 00:00:00 8
1992-09-01 00:00:00 9
1992-09-02 00:00:00 9
1992-09-03 00:00:00 9
1992-09-04 00:00:00 9
1992-09-05 00:00:00 9
1992-09-06 00:00:00 9
1992-09-07 00:00:00 9
1992-09-08 00:00:00 9
1992-09-09 00:00:00 9
1992-09-10 00:00:00 9
1992-09-11 00:00:00 9
1992-09-12 00:00:00 9
1992-09-13 00:00:00 9
1992-09-14 00:00:00 9
1992-09-15 00:00:00 9
1992-09-16 00:00:00 9
1992-09-17 00:00:00 9
1992-09-18 00:00:00 9
1992-09-19 00:00:00 9
1992-09-20 00:00:00 9
1992-09-21 00:00:00 9
1992-09-22 00:00:00 9
1992-09-23 00:00:00 9
1992-09-24 00:00:00 9
1992-09-25 00:00:00 9
1992-09-26 00:00:00 9
1992-09-27 00:00:00 9
1992-09-28 00:00:00 9
1992-09-29 00:00:00 9
1992-09-30 00:00:00 9
1992-10-01 00:00:00 10
1992-10-02 00:00:00 10
1992-10-03 00:00:00 10
1992-10-04 00:00:00 10
1992-10-05 00:00:00 10
1992-10-06 00:00:00 10
1992-10-07 00:00:00 10
1992-10-08 00:00:00 10
1992-10-09 00:00:00 10
1992-10-10 00:00:00 10
1992-10-11 00:00:00 10
1992-10-12 00:00:00 10
1992-10-13 00:00:00 10
1992-10-14 00:00:00 10
1992-10-15 00:00:00 10
1992-10-16 00:00:00 10
1992-10-17 00:00:00 10
1992-10-18 00:00:00 10
1992-10-19 00:00:00 10
1992-10-20 00:00:00 10
1992-10-21 00:00:00 10
1992-10-22 00:00:00 10
1992-10-23 00:00:00 10
1992-10-24 00:00:00 10
1992-10-25 00:00:00 10
1992-10-26 00:00:00 10
1992-10-27 00:00:00 10
1992-10-28 00:00:00 10
1992-10-29 00:00:00 10
1992-10-30 00:00:00 10
1992-10-31 00:00:00 10
1992-11-01 00:00:00 11
1992-11-02 00:00:00 11
1992-11-03 00:00:00 11
1992-11-04 00:00:00 11
1992-11-05 00:00:00 11
1992-11-06 00:00:00 11
1992-11-07 00:00:00 11
1992-11-08 00:00:00 11
1992-11-09 00:00:00 11
1992-11-10 00:00:00 11
1992-11-11 00:00:00 11
1992-11-12 00:00:00 11
1992-11-13 00:00:00 11
1992-11-14 00:00:00 11
1992-11-15 00:00:00 11
1992-11-16 00:00:00 11
1992-11-17 00:00:00 11
1992-11-18 00:00:00 11
1992-11-19 00:00:00 11
1992-11-20 00:00:00 11
1992-11-21 00:00:00 11
1992-11-22 00:00:00 11
1992-11-23 00:00:00 11
1992-11-24 00:00:00 11
1992-11-25 00:00:00 11
1992-11-26 00:00:00 11
1992-11-27 00:00:00 11
1992-11-28 00:00:00 11
1992-11-29 00:00:00 11
1992-11-30 00:00:00 11
1992-12-01 00:00:00 12
1992-12-02 00:00:00 12
1992-12-03 00:00:00 12
1992-12-04 00:00:00 12
1992-12-05 00:00:00 12
1992-12-06 00:00:00 12
1992-12-07 00:00:00 12
1992-12-08 00:00:00 12
1992-12-09 00:00:00 12
1992-12-10 00:00:00 12
1992-12-11 00:00:00 12
1992-12-12 00:00:00 12
1992-12-13 00:00:00 12
1992-12-14 00:00:00 12
1992-12-15 00:00:00 12
1992-12-16 00:00:00 12
1992-12-17 00:00:00 12
1992-12-18 00:00:00 12
1992-12-19 00:00:00 12
1992-12-20 00:00:00 12
1992-12-21 00:00:00 12
1992-12-22 00:00:00 12
1992-12-23 00:00:00 12
1992-12-24 00:00:00 12
1992-12-25 00:00:00 12
1992-12-26 00:00:00 12
1992-12-27 00:00:00 12
1992-12-28 00:00:00 12
1992-12-29 00:00:00 12
1992-12-30 00:00:00 12
1992-12-31 00:00:00 12
query II
select date '1993-01-01' + interval (i) days, month(date '1993-01-01' + interval (i) days) from range(0, 366) tbl(i);
----
1993-01-01 00:00:00 1
1993-01-02 00:00:00 1
1993-01-03 00:00:00 1
1993-01-04 00:00:00 1
1993-01-05 00:00:00 1
1993-01-06 00:00:00 1
1993-01-07 00:00:00 1
1993-01-08 00:00:00 1
1993-01-09 00:00:00 1
1993-01-10 00:00:00 1
1993-01-11 00:00:00 1
1993-01-12 00:00:00 1
1993-01-13 00:00:00 1
1993-01-14 00:00:00 1
1993-01-15 00:00:00 1
1993-01-16 00:00:00 1
1993-01-17 00:00:00 1
1993-01-18 00:00:00 1
1993-01-19 00:00:00 1
1993-01-20 00:00:00 1
1993-01-21 00:00:00 1
1993-01-22 00:00:00 1
1993-01-23 00:00:00 1
1993-01-24 00:00:00 1
1993-01-25 00:00:00 1
1993-01-26 00:00:00 1
1993-01-27 00:00:00 1
1993-01-28 00:00:00 1
1993-01-29 00:00:00 1
1993-01-30 00:00:00 1
1993-01-31 00:00:00 1
1993-02-01 00:00:00 2
1993-02-02 00:00:00 2
1993-02-03 00:00:00 2
1993-02-04 00:00:00 2
1993-02-05 00:00:00 2
1993-02-06 00:00:00 2
1993-02-07 00:00:00 2
1993-02-08 00:00:00 2
1993-02-09 00:00:00 2
1993-02-10 00:00:00 2
1993-02-11 00:00:00 2
1993-02-12 00:00:00 2
1993-02-13 00:00:00 2
1993-02-14 00:00:00 2
1993-02-15 00:00:00 2
1993-02-16 00:00:00 2
1993-02-17 00:00:00 2
1993-02-18 00:00:00 2
1993-02-19 00:00:00 2
1993-02-20 00:00:00 2
1993-02-21 00:00:00 2
1993-02-22 00:00:00 2
1993-02-23 00:00:00 2
1993-02-24 00:00:00 2
1993-02-25 00:00:00 2
1993-02-26 00:00:00 2
1993-02-27 00:00:00 2
1993-02-28 00:00:00 2
1993-03-01 00:00:00 3
1993-03-02 00:00:00 3
1993-03-03 00:00:00 3
1993-03-04 00:00:00 3
1993-03-05 00:00:00 3
1993-03-06 00:00:00 3
1993-03-07 00:00:00 3
1993-03-08 00:00:00 3
1993-03-09 00:00:00 3
1993-03-10 00:00:00 3
1993-03-11 00:00:00 3
1993-03-12 00:00:00 3
1993-03-13 00:00:00 3
1993-03-14 00:00:00 3
1993-03-15 00:00:00 3
1993-03-16 00:00:00 3
1993-03-17 00:00:00 3
1993-03-18 00:00:00 3
1993-03-19 00:00:00 3
1993-03-20 00:00:00 3
1993-03-21 00:00:00 3
1993-03-22 00:00:00 3
1993-03-23 00:00:00 3
1993-03-24 00:00:00 3
1993-03-25 00:00:00 3
1993-03-26 00:00:00 3
1993-03-27 00:00:00 3
1993-03-28 00:00:00 3
1993-03-29 00:00:00 3
1993-03-30 00:00:00 3
1993-03-31 00:00:00 3
1993-04-01 00:00:00 4
1993-04-02 00:00:00 4
1993-04-03 00:00:00 4
1993-04-04 00:00:00 4
1993-04-05 00:00:00 4
1993-04-06 00:00:00 4
1993-04-07 00:00:00 4
1993-04-08 00:00:00 4
1993-04-09 00:00:00 4
1993-04-10 00:00:00 4
1993-04-11 00:00:00 4
1993-04-12 00:00:00 4
1993-04-13 00:00:00 4
1993-04-14 00:00:00 4
1993-04-15 00:00:00 4
1993-04-16 00:00:00 4
1993-04-17 00:00:00 4
1993-04-18 00:00:00 4
1993-04-19 00:00:00 4
1993-04-20 00:00:00 4
1993-04-21 00:00:00 4
1993-04-22 00:00:00 4
1993-04-23 00:00:00 4
1993-04-24 00:00:00 4
1993-04-25 00:00:00 4
1993-04-26 00:00:00 4
1993-04-27 00:00:00 4
1993-04-28 00:00:00 4
1993-04-29 00:00:00 4
1993-04-30 00:00:00 4
1993-05-01 00:00:00 5
1993-05-02 00:00:00 5
1993-05-03 00:00:00 5
1993-05-04 00:00:00 5
1993-05-05 00:00:00 5
1993-05-06 00:00:00 5
1993-05-07 00:00:00 5
1993-05-08 00:00:00 5
1993-05-09 00:00:00 5
1993-05-10 00:00:00 5
1993-05-11 00:00:00 5
1993-05-12 00:00:00 5
1993-05-13 00:00:00 5
1993-05-14 00:00:00 5
1993-05-15 00:00:00 5
1993-05-16 00:00:00 5
1993-05-17 00:00:00 5
1993-05-18 00:00:00 5
1993-05-19 00:00:00 5
1993-05-20 00:00:00 5
1993-05-21 00:00:00 5
1993-05-22 00:00:00 5
1993-05-23 00:00:00 5
1993-05-24 00:00:00 5
1993-05-25 00:00:00 5
1993-05-26 00:00:00 5
1993-05-27 00:00:00 5
1993-05-28 00:00:00 5
1993-05-29 00:00:00 5
1993-05-30 00:00:00 5
1993-05-31 00:00:00 5
1993-06-01 00:00:00 6
1993-06-02 00:00:00 6
1993-06-03 00:00:00 6
1993-06-04 00:00:00 6
1993-06-05 00:00:00 6
1993-06-06 00:00:00 6
1993-06-07 00:00:00 6
1993-06-08 00:00:00 6
1993-06-09 00:00:00 6
1993-06-10 00:00:00 6
1993-06-11 00:00:00 6
1993-06-12 00:00:00 6
1993-06-13 00:00:00 6
1993-06-14 00:00:00 6
1993-06-15 00:00:00 6
1993-06-16 00:00:00 6
1993-06-17 00:00:00 6
1993-06-18 00:00:00 6
1993-06-19 00:00:00 6
1993-06-20 00:00:00 6
1993-06-21 00:00:00 6
1993-06-22 00:00:00 6
1993-06-23 00:00:00 6
1993-06-24 00:00:00 6
1993-06-25 00:00:00 6
1993-06-26 00:00:00 6
1993-06-27 00:00:00 6
1993-06-28 00:00:00 6
1993-06-29 00:00:00 6
1993-06-30 00:00:00 6
1993-07-01 00:00:00 7
1993-07-02 00:00:00 7
1993-07-03 00:00:00 7
1993-07-04 00:00:00 7
1993-07-05 00:00:00 7
1993-07-06 00:00:00 7
1993-07-07 00:00:00 7
1993-07-08 00:00:00 7
1993-07-09 00:00:00 7
1993-07-10 00:00:00 7
1993-07-11 00:00:00 7
1993-07-12 00:00:00 7
1993-07-13 00:00:00 7
1993-07-14 00:00:00 7
1993-07-15 00:00:00 7
1993-07-16 00:00:00 7
1993-07-17 00:00:00 7
1993-07-18 00:00:00 7
1993-07-19 00:00:00 7
1993-07-20 00:00:00 7
1993-07-21 00:00:00 7
1993-07-22 00:00:00 7
1993-07-23 00:00:00 7
1993-07-24 00:00:00 7
1993-07-25 00:00:00 7
1993-07-26 00:00:00 7
1993-07-27 00:00:00 7
1993-07-28 00:00:00 7
1993-07-29 00:00:00 7
1993-07-30 00:00:00 7
1993-07-31 00:00:00 7
1993-08-01 00:00:00 8
1993-08-02 00:00:00 8
1993-08-03 00:00:00 8
1993-08-04 00:00:00 8
1993-08-05 00:00:00 8
1993-08-06 00:00:00 8
1993-08-07 00:00:00 8
1993-08-08 00:00:00 8
1993-08-09 00:00:00 8
1993-08-10 00:00:00 8
1993-08-11 00:00:00 8
1993-08-12 00:00:00 8
1993-08-13 00:00:00 8
1993-08-14 00:00:00 8
1993-08-15 00:00:00 8
1993-08-16 00:00:00 8
1993-08-17 00:00:00 8
1993-08-18 00:00:00 8
1993-08-19 00:00:00 8
1993-08-20 00:00:00 8
1993-08-21 00:00:00 8
1993-08-22 00:00:00 8
1993-08-23 00:00:00 8
1993-08-24 00:00:00 8
1993-08-25 00:00:00 8
1993-08-26 00:00:00 8
1993-08-27 00:00:00 8
1993-08-28 00:00:00 8
1993-08-29 00:00:00 8
1993-08-30 00:00:00 8
1993-08-31 00:00:00 8
1993-09-01 00:00:00 9
1993-09-02 00:00:00 9
1993-09-03 00:00:00 9
1993-09-04 00:00:00 9
1993-09-05 00:00:00 9
1993-09-06 00:00:00 9
1993-09-07 00:00:00 9
1993-09-08 00:00:00 9
1993-09-09 00:00:00 9
1993-09-10 00:00:00 9
1993-09-11 00:00:00 9
1993-09-12 00:00:00 9
1993-09-13 00:00:00 9
1993-09-14 00:00:00 9
1993-09-15 00:00:00 9
1993-09-16 00:00:00 9
1993-09-17 00:00:00 9
1993-09-18 00:00:00 9
1993-09-19 00:00:00 9
1993-09-20 00:00:00 9
1993-09-21 00:00:00 9
1993-09-22 00:00:00 9
1993-09-23 00:00:00 9
1993-09-24 00:00:00 9
1993-09-25 00:00:00 9
1993-09-26 00:00:00 9
1993-09-27 00:00:00 9
1993-09-28 00:00:00 9
1993-09-29 00:00:00 9
1993-09-30 00:00:00 9
1993-10-01 00:00:00 10
1993-10-02 00:00:00 10
1993-10-03 00:00:00 10
1993-10-04 00:00:00 10
1993-10-05 00:00:00 10
1993-10-06 00:00:00 10
1993-10-07 00:00:00 10
1993-10-08 00:00:00 10
1993-10-09 00:00:00 10
1993-10-10 00:00:00 10
1993-10-11 00:00:00 10
1993-10-12 00:00:00 10
1993-10-13 00:00:00 10
1993-10-14 00:00:00 10
1993-10-15 00:00:00 10
1993-10-16 00:00:00 10
1993-10-17 00:00:00 10
1993-10-18 00:00:00 10
1993-10-19 00:00:00 10
1993-10-20 00:00:00 10
1993-10-21 00:00:00 10
1993-10-22 00:00:00 10
1993-10-23 00:00:00 10
1993-10-24 00:00:00 10
1993-10-25 00:00:00 10
1993-10-26 00:00:00 10
1993-10-27 00:00:00 10
1993-10-28 00:00:00 10
1993-10-29 00:00:00 10
1993-10-30 00:00:00 10
1993-10-31 00:00:00 10
1993-11-01 00:00:00 11
1993-11-02 00:00:00 11
1993-11-03 00:00:00 11
1993-11-04 00:00:00 11
1993-11-05 00:00:00 11
1993-11-06 00:00:00 11
1993-11-07 00:00:00 11
1993-11-08 00:00:00 11
1993-11-09 00:00:00 11
1993-11-10 00:00:00 11
1993-11-11 00:00:00 11
1993-11-12 00:00:00 11
1993-11-13 00:00:00 11
1993-11-14 00:00:00 11
1993-11-15 00:00:00 11
1993-11-16 00:00:00 11
1993-11-17 00:00:00 11
1993-11-18 00:00:00 11
1993-11-19 00:00:00 11
1993-11-20 00:00:00 11
1993-11-21 00:00:00 11
1993-11-22 00:00:00 11
1993-11-23 00:00:00 11
1993-11-24 00:00:00 11
1993-11-25 00:00:00 11
1993-11-26 00:00:00 11
1993-11-27 00:00:00 11
1993-11-28 00:00:00 11
1993-11-29 00:00:00 11
1993-11-30 00:00:00 11
1993-12-01 00:00:00 12
1993-12-02 00:00:00 12
1993-12-03 00:00:00 12
1993-12-04 00:00:00 12
1993-12-05 00:00:00 12
1993-12-06 00:00:00 12
1993-12-07 00:00:00 12
1993-12-08 00:00:00 12
1993-12-09 00:00:00 12
1993-12-10 00:00:00 12
1993-12-11 00:00:00 12
1993-12-12 00:00:00 12
1993-12-13 00:00:00 12
1993-12-14 00:00:00 12
1993-12-15 00:00:00 12
1993-12-16 00:00:00 12
1993-12-17 00:00:00 12
1993-12-18 00:00:00 12
1993-12-19 00:00:00 12
1993-12-20 00:00:00 12
1993-12-21 00:00:00 12
1993-12-22 00:00:00 12
1993-12-23 00:00:00 12
1993-12-24 00:00:00 12
1993-12-25 00:00:00 12
1993-12-26 00:00:00 12
1993-12-27 00:00:00 12
1993-12-28 00:00:00 12
1993-12-29 00:00:00 12
1993-12-30 00:00:00 12
1993-12-31 00:00:00 12
1994-01-01 00:00:00 1

View File

@@ -0,0 +1,650 @@
# name: test/sql/function/date/test_extract_year.test
# description: Extract year function
# group: [date]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE dates AS SELECT date '1970-01-01' + concat(i, ' years')::interval AS d from range(0, 430) tbl(i);
statement ok
CREATE TABLE dates2 AS SELECT date '1970-01-01' + concat(i * 6, ' months')::interval AS d from range(0, 200) tbl(i);
query I
SELECT EXTRACT(year FROM d) FROM dates ORDER BY 1
----
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
query I
SELECT EXTRACT(year FROM d) FROM dates2 ORDER BY 1
----
1970
1970
1971
1971
1972
1972
1973
1973
1974
1974
1975
1975
1976
1976
1977
1977
1978
1978
1979
1979
1980
1980
1981
1981
1982
1982
1983
1983
1984
1984
1985
1985
1986
1986
1987
1987
1988
1988
1989
1989
1990
1990
1991
1991
1992
1992
1993
1993
1994
1994
1995
1995
1996
1996
1997
1997
1998
1998
1999
1999
2000
2000
2001
2001
2002
2002
2003
2003
2004
2004
2005
2005
2006
2006
2007
2007
2008
2008
2009
2009
2010
2010
2011
2011
2012
2012
2013
2013
2014
2014
2015
2015
2016
2016
2017
2017
2018
2018
2019
2019
2020
2020
2021
2021
2022
2022
2023
2023
2024
2024
2025
2025
2026
2026
2027
2027
2028
2028
2029
2029
2030
2030
2031
2031
2032
2032
2033
2033
2034
2034
2035
2035
2036
2036
2037
2037
2038
2038
2039
2039
2040
2040
2041
2041
2042
2042
2043
2043
2044
2044
2045
2045
2046
2046
2047
2047
2048
2048
2049
2049
2050
2050
2051
2051
2052
2052
2053
2053
2054
2054
2055
2055
2056
2056
2057
2057
2058
2058
2059
2059
2060
2060
2061
2061
2062
2062
2063
2063
2064
2064
2065
2065
2066
2066
2067
2067
2068
2068
2069
2069

View File

@@ -0,0 +1,172 @@
# name: test/sql/function/date/test_strftime.test
# description: Test strftime function
# group: [date]
statement ok
SET default_null_order='nulls_first';
statement ok
PRAGMA enable_verification
# simple single specifier
query I
SELECT strftime(DATE '1992-01-01', '%Y');
----
1992
# flip the order
query I
SELECT strftime('%Y', DATE '1992-01-01');
----
1992
query I
SELECT strftime('%Y', TIMESTAMP '1992-01-01');
----
1992
# some literals
query I
SELECT strftime(DATE '1992-01-01', '(%Y)');
----
(1992)
# escapes
query I
SELECT strftime(DATE '1992-01-01', '%% %Y %%');
----
% 1992 %
# many consecutive escapes
query I
SELECT strftime(DATE '1992-01-01', '%%%%%% %Y %%%%%%');
----
%%% 1992 %%%
# multiple specifiers
query I
SELECT strftime(DATE '1992-02-01', '%d/%m/%Y');
----
01/02/1992
# we can repeat the same specifier many times
query I
SELECT strftime(DATE '1992-02-01', '%Y %Y %Y %Y');
----
1992 1992 1992 1992
# test on a table
statement ok
CREATE TABLE dates(d DATE);
INSERT INTO dates VALUES ('1992-01-01'), ('1993-03-20'), (NULL);
query I
SELECT strftime(d, '%d/%m/%Y') FROM dates ORDER BY d;
----
NULL
01/01/1992
20/03/1993
# null date
query I
SELECT strftime(NULL::DATE, '%d/%m/%Y') FROM dates ORDER BY d;
----
NULL
NULL
NULL
# null format
query I
SELECT strftime(d, NULL) FROM dates ORDER BY d;
----
NULL
NULL
NULL
query I
SELECT strftime(NULL::TIMESTAMP, NULL) FROM range(3);
----
NULL
NULL
NULL
query I
SELECT strftime(NULL::TIMESTAMP, '%%%%%% %Y %%%%%%') FROM range(3);
----
NULL
NULL
NULL
# no specifiers, only constant
query I
SELECT strftime(DATE '1992-01-01', 'hello world');
----
hello world
query I
SELECT strftime('2019-01-23'::DATE, '42');
----
42
#
# Infinities
#
foreach datatype DATE TIMESTAMP
# PG to_char returns NULL here
# but we can do better.
query I
SELECT strftime('infinity'::${datatype}, '%Y-%m-%d');
----
infinity
query I
SELECT strftime('-infinity'::${datatype}, '%Y-%m-%d');
----
-infinity
endloop
# non-constant format not supported
statement error
SELECT strftime(d, d::VARCHAR) FROM dates ORDER BY d;
----
<REGEX>:.*Invalid Input Error.*must be a constant.*
# unterminated escape
statement error
SELECT strftime(DATE '1992-01-01', '%');
----
<REGEX>:.*Invalid Input Error.*Failed to parse format.*
# unrecognized code
statement error
SELECT strftime(DATE '1992-01-01', '%R');
----
<REGEX>:.*Invalid Input Error.*Failed to parse format.*
# millisecond specifier %g
query IIII
select strftime(strptime('023', '%g'), '%g'), strftime(strptime('0', '%g'), '%g'), strftime(strptime('000', '%g'), '%g'), strftime(strptime('999', '%g'), '%g');
----
023
000
000
999
statement error
SELECT strptime('-1', '%g');
----
<REGEX>:.*Invalid Input Error.*Could not parse string.*
statement error
SELECT strptime('1000', '%g');
----
<REGEX>:.*Invalid Input Error.*Could not parse string.*
# this won't work without explicit casts
statement error
SELECT strftime('%Y', '1992-01-01');
----
<REGEX>:.*Binder Error.*Could not choose a best candidate.*

View File

@@ -0,0 +1,417 @@
# name: test/sql/function/date/test_strftime_exhaustive.test
# description: Test all strftime % codes with the date type
# group: [date]
statement ok
SET default_null_order='nulls_first';
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE dates(d DATE);
INSERT INTO dates VALUES ('1992-01-01'), ('1993-03-20'), ('2020-08-09'), ('2020-08-10'), (NULL);
# %a: Abbreviated weekday name
query I
SELECT strftime(d, '%a') FROM dates ORDER BY d;
----
NULL
Wed
Sat
Sun
Mon
# %A: Full weekday name
query I
SELECT strftime(d, '%A') FROM dates ORDER BY d;
----
NULL
Wednesday
Saturday
Sunday
Monday
# %w - Weekday as a decimal number.
query I
SELECT strftime(d, '%w') FROM dates ORDER BY d;
----
NULL
3
6
0
1
# %u - ISO Weekday as a decimal number (1-7)
query I
SELECT strftime(d, '%u') FROM dates ORDER BY d;
----
NULL
3
6
7
1
# %d - Day of the month as a zero-padded decimal.
query I
SELECT strftime(d, '%d') FROM dates ORDER BY d;
----
NULL
01
20
09
10
# %-d - Day of the month as a decimal number.
query I
SELECT strftime(d, '%-d') FROM dates ORDER BY d;
----
NULL
1
20
9
10
# %b - Abbreviated month name.
query I
SELECT strftime(d, '%b') FROM dates ORDER BY d;
----
NULL
Jan
Mar
Aug
Aug
# %h - alias for %b
query I
SELECT strftime(d, '%h') FROM dates ORDER BY d;
----
NULL
Jan
Mar
Aug
Aug
# %B - Full month name
query I
SELECT strftime(d, '%B') FROM dates ORDER BY d;
----
NULL
January
March
August
August
# %m - Month as a zero-padded decimal number
query I
SELECT strftime(d, '%m') FROM dates ORDER BY d;
----
NULL
01
03
08
08
# %-m - Month as a decimal number. (1, 2, ..., 12)
query I
SELECT strftime(d, '%-m') FROM dates ORDER BY d;
----
NULL
1
3
8
8
# %y - Year without century as a zero-padded decimal number.
query I
SELECT strftime(d, '%y') FROM dates ORDER BY d;
----
NULL
92
93
20
20
# %-y - Year without century as a decimal number.
query I
SELECT strftime(d, '%-y') FROM dates ORDER BY d;
----
NULL
92
93
20
20
query I
SELECT strftime(DATE '2001-01-01', '%-y')
----
1
# %Y - Year with century as a decimal number.
query I
SELECT strftime(d, '%Y') FROM dates ORDER BY d;
----
NULL
1992
1993
2020
2020
# %G - ISO Year as a decimal number.
query I
SELECT strftime(d, '%G') FROM dates ORDER BY d;
----
NULL
1992
1993
2020
2020
# %H - Hour (24-hour clock) as a zero-padded decimal number.
query I
SELECT strftime(d, '%H') FROM dates ORDER BY d;
----
NULL
00
00
00
00
# %-H - Hour (24-hour clock) as a decimal number. (0, 1, ..., 23)
query I
SELECT strftime(d, '%-H') FROM dates ORDER BY d;
----
NULL
0
0
0
0
# %I - Hour (12-hour clock) as a zero-padded decimal number.
query I
SELECT strftime(d, '%I') FROM dates ORDER BY d;
----
NULL
12
12
12
12
# %-I - Hour (12-hour clock) as a decimal number. (1, 2, ... 12)
query I
SELECT strftime(d, '%-I') FROM dates ORDER BY d;
----
NULL
12
12
12
12
# %p - Locales AM or PM.
query I
SELECT strftime(d, '%p') FROM dates ORDER BY d;
----
NULL
AM
AM
AM
AM
# %M - Minute as a zero-padded decimal number.
query I
SELECT strftime(d, '%M') FROM dates ORDER BY d;
----
NULL
00
00
00
00
# %-M - Minute as a decimal number. (0, 1, ..., 59)
query I
SELECT strftime(d, '%-M') FROM dates ORDER BY d;
----
NULL
0
0
0
0
# %S - Second as a zero-padded decimal number.
query I
SELECT strftime(d, '%S') FROM dates ORDER BY d;
----
NULL
00
00
00
00
# %-S - Second as a decimal number. (0, 1, ..., 59)
query I
SELECT strftime(d, '%-S') FROM dates ORDER BY d;
----
NULL
0
0
0
0
# %f - Microsecond as a decimal number, zero-padded on the left.
query I
SELECT strftime(d, '%f') FROM dates ORDER BY d;
----
NULL
000000
000000
000000
000000
# %z - UTC offset in the form +HHMM or -HHMM.
query I
SELECT strftime(d, '%z') FROM dates ORDER BY d;
----
NULL
+00
+00
+00
+00
# %Z - Time zone name.
query I
SELECT strftime(d, '%Z') FROM dates ORDER BY d;
----
NULL
(empty)
(empty)
(empty)
(empty)
# %j - Day of the year as a zero-padded decimal number.
query I
SELECT strftime(d, '%j') FROM dates ORDER BY d;
----
NULL
001
079
222
223
# %-j - Day of the year as a decimal number. (1, 2, ..., 366)
query I
SELECT strftime(d, '%-j') FROM dates ORDER BY d;
----
NULL
1
79
222
223
# %U - Week number of the year (Sunday as the first day of the week).
query I
SELECT strftime(d, '%U') FROM dates ORDER BY d;
----
NULL
00
11
32
32
# %W - Week number of the year (Monday as the first day of the week).
query I
SELECT strftime(d, '%W') FROM dates ORDER BY d;
----
NULL
00
11
31
32
# %V - ISO Week number of the year (First week contains Jan 4).
query I
SELECT strftime(d, '%V') FROM dates ORDER BY d;
----
NULL
01
11
32
33
# %c - Locales appropriate date and time representation.
query I
SELECT strftime(d, '%c') FROM dates ORDER BY d;
----
NULL
1992-01-01 00:00:00
1993-03-20 00:00:00
2020-08-09 00:00:00
2020-08-10 00:00:00
query I
SELECT strftime(d, 'XX%cXX') FROM dates ORDER BY d;
----
NULL
XX1992-01-01 00:00:00XX
XX1993-03-20 00:00:00XX
XX2020-08-09 00:00:00XX
XX2020-08-10 00:00:00XX
# %x - Locales appropriate date representation.
query I
SELECT strftime(d, '%x') FROM dates ORDER BY d;
----
NULL
1992-01-01
1993-03-20
2020-08-09
2020-08-10
# X - Locales appropriate time representation.
query I
SELECT strftime(d, '%X') FROM dates ORDER BY d;
----
NULL
00:00:00
00:00:00
00:00:00
00:00:00
query I
SELECT strftime(d, 'XX%cXX%xXX%XXX') FROM dates ORDER BY d;
----
NULL
XX1992-01-01 00:00:00XX1992-01-01XX00:00:00XX
XX1993-03-20 00:00:00XX1993-03-20XX00:00:00XX
XX2020-08-09 00:00:00XX2020-08-09XX00:00:00XX
XX2020-08-10 00:00:00XX2020-08-10XX00:00:00XX
# large year
query I
SELECT strftime(date '-99999-01-01', '%Y')
----
-99999
query I
SELECT strftime(date '99999-01-01', '%Y')
----
99999
query I
SELECT strftime(date '99999-01-01', '%y')
----
99
query I
SELECT strftime(date '-99999-01-01', '%y')
----
99
query I
SELECT strftime(DATE '-4869706-10-11','%-yi');
----
6i
statement error
SELECT strftime(date '-99999-01-01', random()::varchar)
----
<REGEX>:.*Invalid Input Error.*must be a constant.*

View File

@@ -0,0 +1,603 @@
# name: test/sql/function/date/test_time_bucket_date.test
# description: Test time bucket functionality
# group: [date]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE dates(w INTERVAL, d DATE, shift INTERVAL, origin DATE);
statement ok
INSERT INTO dates VALUES ('10 days', '-infinity', '0 days', '1970-01-05'),
('10 days', '3000-01-02 (BC)', '3 days', '3000-01-01 (BC)'),
('2 months', '1024-04-10 (BC)', '10 days', '1024-03-01 (BC)'),
('10 days', '0044-06-15 (BC)', '6 days', '0044-02-01 (BC)'),
('10 days', '0794-11-15', '1 week', '0790-11-01'),
('10 days', '1700-01-01', '0 days', '1700-01-05'),
('1 week', '1832-05-03', '0 days', '1970-05-05'),
('10 days', '1897-07-05', '2 days', '1970-06-07'),
('10 days', '1906-02-08', '-2 days', '1970-10-03'),
('2 months', '1946-09-14', '0 months', '1970-07-05'),
('2 months', '2000-01-01', '1 month 1 week', '1970-05-01'),
('2 months', '2000-01-03', '-1 month 1 week', '1970-08-20'),
('2 year', '2004-05-20', '6 months', '1970-12-31'),
('2 year', '2032-12-06', '-6 months', '1969-07-01'),
('10 days', 'infinity', '0 days', '1970-01-01'),
;
query II
select d, time_bucket('3 days'::interval, d) from dates;
----
-infinity -infinity
3000-01-02 (BC) 3000-01-02 (BC)
1024-04-10 (BC) 1024-04-10 (BC)
0044-06-15 (BC) 0044-06-14 (BC)
0794-11-15 0794-11-15
1700-01-01 1699-12-31
1832-05-03 1832-05-01
1897-07-05 1897-07-04
1906-02-08 1906-02-06
1946-09-14 1946-09-13
2000-01-01 1999-12-31
2000-01-03 2000-01-03
2004-05-20 2004-05-20
2032-12-06 2032-12-04
infinity infinity
query II
select d, time_bucket('3 years'::interval, d) from dates;
----
-infinity -infinity
3000-01-02 (BC) 3002-01-01 (BC)
1024-04-10 (BC) 1025-01-01 (BC)
0044-06-15 (BC) 0044-01-01 (BC)
0794-11-15 0794-01-01
1700-01-01 1700-01-01
1832-05-03 1832-01-01
1897-07-05 1895-01-01
1906-02-08 1904-01-01
1946-09-14 1946-01-01
2000-01-01 2000-01-01
2000-01-03 2000-01-01
2004-05-20 2003-01-01
2032-12-06 2030-01-01
infinity infinity
query II
select d, time_bucket(null::interval, d) from dates;
----
-infinity NULL
3000-01-02 (BC) NULL
1024-04-10 (BC) NULL
0044-06-15 (BC) NULL
0794-11-15 NULL
1700-01-01 NULL
1832-05-03 NULL
1897-07-05 NULL
1906-02-08 NULL
1946-09-14 NULL
2000-01-01 NULL
2000-01-03 NULL
2004-05-20 NULL
2032-12-06 NULL
infinity NULL
query III
select w, d, time_bucket(w, d) from dates;
----
10 days -infinity -infinity
10 days 3000-01-02 (BC) 3001-12-31 (BC)
2 months 1024-04-10 (BC) 1024-03-01 (BC)
10 days 0044-06-15 (BC) 0044-06-12 (BC)
10 days 0794-11-15 0794-11-11
10 days 1700-01-01 1699-12-26
7 days 1832-05-03 1832-04-30
10 days 1897-07-05 1897-07-01
10 days 1906-02-08 1906-02-05
2 months 1946-09-14 1946-09-01
2 months 2000-01-01 2000-01-01
2 months 2000-01-03 2000-01-01
2 years 2004-05-20 2004-01-01
2 years 2032-12-06 2032-01-01
10 days infinity infinity
query II
select d, time_bucket('4 days'::interval, d, '6 hours'::interval) from dates;
----
-infinity -infinity
3000-01-02 (BC) 3001-12-29 (BC)
1024-04-10 (BC) 1024-04-08 (BC)
0044-06-15 (BC) 0044-06-14 (BC)
0794-11-15 0794-11-13
1700-01-01 1699-12-30
1832-05-03 1832-04-29
1897-07-05 1897-07-01
1906-02-08 1906-02-05
1946-09-14 1946-09-11
2000-01-01 1999-12-30
2000-01-03 1999-12-30
2004-05-20 2004-05-17
2032-12-06 2032-12-04
infinity infinity
query II
select d, time_bucket('2 weeks'::interval, d, '6 days'::interval) from dates;
----
-infinity -infinity
3000-01-02 (BC) 3001-12-21 (BC)
1024-04-10 (BC) 1024-04-06 (BC)
0044-06-15 (BC) 0044-06-02 (BC)
0794-11-15 0794-11-13
1700-01-01 1699-12-20
1832-05-03 1832-04-29
1897-07-05 1897-06-27
1906-02-08 1906-01-28
1946-09-14 1946-09-01
2000-01-01 1999-12-26
2000-01-03 1999-12-26
2004-05-20 2004-05-09
2032-12-06 2032-11-28
infinity infinity
query II
select d, time_bucket('3 months'::interval, d, '6 days'::interval) from dates;
----
-infinity -infinity
3000-01-02 (BC) 3001-10-07 (BC)
1024-04-10 (BC) 1024-04-07 (BC)
0044-06-15 (BC) 0044-04-07 (BC)
0794-11-15 0794-10-07
1700-01-01 1699-10-07
1832-05-03 1832-04-07
1897-07-05 1897-04-07
1906-02-08 1906-01-07
1946-09-14 1946-07-07
2000-01-01 1999-10-07
2000-01-03 1999-10-07
2004-05-20 2004-04-07
2032-12-06 2032-10-07
infinity infinity
query II
select d, time_bucket(null::interval, d, '6 days'::interval) from dates;
----
-infinity NULL
3000-01-02 (BC) NULL
1024-04-10 (BC) NULL
0044-06-15 (BC) NULL
0794-11-15 NULL
1700-01-01 NULL
1832-05-03 NULL
1897-07-05 NULL
1906-02-08 NULL
1946-09-14 NULL
2000-01-01 NULL
2000-01-03 NULL
2004-05-20 NULL
2032-12-06 NULL
infinity NULL
query I
select time_bucket('3 months'::interval, null::date, '6 days'::interval) from dates;
----
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
query II
select d, time_bucket('3 months'::interval, d, null::interval) from dates;
----
-infinity NULL
3000-01-02 (BC) NULL
1024-04-10 (BC) NULL
0044-06-15 (BC) NULL
0794-11-15 NULL
1700-01-01 NULL
1832-05-03 NULL
1897-07-05 NULL
1906-02-08 NULL
1946-09-14 NULL
2000-01-01 NULL
2000-01-03 NULL
2004-05-20 NULL
2032-12-06 NULL
infinity NULL
query IIII
select w, d, shift, time_bucket(w, d, shift) from dates;
----
10 days -infinity 00:00:00 -infinity
10 days 3000-01-02 (BC) 3 days 3001-12-24 (BC)
2 months 1024-04-10 (BC) 10 days 1024-03-11 (BC)
10 days 0044-06-15 (BC) 6 days 0044-06-08 (BC)
10 days 0794-11-15 7 days 0794-11-08
10 days 1700-01-01 00:00:00 1699-12-26
7 days 1832-05-03 00:00:00 1832-04-30
10 days 1897-07-05 2 days 1897-07-03
10 days 1906-02-08 -2 days 1906-02-03
2 months 1946-09-14 00:00:00 1946-09-01
2 months 2000-01-01 1 month 7 days 1999-12-08
2 months 2000-01-03 -1 month 7 days 1999-12-08
2 years 2004-05-20 6 months 2002-07-01
2 years 2032-12-06 -6 months 2031-07-01
10 days infinity 00:00:00 infinity
query II
select d, time_bucket('5 days'::interval, d, '1970-01-04'::date) from dates;
----
-infinity -infinity
3000-01-02 (BC) 3001-12-30 (BC)
1024-04-10 (BC) 1024-04-09 (BC)
0044-06-15 (BC) 0044-06-11 (BC)
0794-11-15 0794-11-15
1700-01-01 1699-12-30
1832-05-03 1832-05-02
1897-07-05 1897-07-05
1906-02-08 1906-02-04
1946-09-14 1946-09-12
2000-01-01 1999-12-28
2000-01-03 2000-01-02
2004-05-20 2004-05-20
2032-12-06 2032-12-04
infinity infinity
query II
select d, time_bucket('3 months'::interval, d, '1970-01-04'::date) from dates;
----
-infinity -infinity
3000-01-02 (BC) 3000-01-01 (BC)
1024-04-10 (BC) 1024-04-01 (BC)
0044-06-15 (BC) 0044-04-01 (BC)
0794-11-15 0794-10-01
1700-01-01 1700-01-01
1832-05-03 1832-04-01
1897-07-05 1897-07-01
1906-02-08 1906-01-01
1946-09-14 1946-07-01
2000-01-01 2000-01-01
2000-01-03 2000-01-01
2004-05-20 2004-04-01
2032-12-06 2032-10-01
infinity infinity
query II
select d, time_bucket('3 years'::interval, d, '1970-01-04'::date) from dates;
----
-infinity -infinity
3000-01-02 (BC) 3002-01-01 (BC)
1024-04-10 (BC) 1025-01-01 (BC)
0044-06-15 (BC) 0044-01-01 (BC)
0794-11-15 0794-01-01
1700-01-01 1700-01-01
1832-05-03 1832-01-01
1897-07-05 1895-01-01
1906-02-08 1904-01-01
1946-09-14 1946-01-01
2000-01-01 2000-01-01
2000-01-03 2000-01-01
2004-05-20 2003-01-01
2032-12-06 2030-01-01
infinity infinity
query II
select d, time_bucket(null::interval, d, '1970-01-04'::date) from dates;
----
-infinity NULL
3000-01-02 (BC) NULL
1024-04-10 (BC) NULL
0044-06-15 (BC) NULL
0794-11-15 NULL
1700-01-01 NULL
1832-05-03 NULL
1897-07-05 NULL
1906-02-08 NULL
1946-09-14 NULL
2000-01-01 NULL
2000-01-03 NULL
2004-05-20 NULL
2032-12-06 NULL
infinity NULL
query I
select time_bucket('3 years'::interval, null::date, '1970-01-04'::date) from dates;
----
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
query II
select d, time_bucket('3 years'::interval, d, null::date) from dates;
----
-infinity NULL
3000-01-02 (BC) NULL
1024-04-10 (BC) NULL
0044-06-15 (BC) NULL
0794-11-15 NULL
1700-01-01 NULL
1832-05-03 NULL
1897-07-05 NULL
1906-02-08 NULL
1946-09-14 NULL
2000-01-01 NULL
2000-01-03 NULL
2004-05-20 NULL
2032-12-06 NULL
infinity NULL
query IIII
select w, d, origin, time_bucket(w, d, origin) from dates;
----
10 days -infinity 1970-01-05 -infinity
10 days 3000-01-02 (BC) 3000-01-01 (BC) 3000-01-01 (BC)
2 months 1024-04-10 (BC) 1024-03-01 (BC) 1024-03-01 (BC)
10 days 0044-06-15 (BC) 0044-02-01 (BC) 0044-06-11 (BC)
10 days 0794-11-15 0790-11-01 0794-11-10
10 days 1700-01-01 1700-01-05 1699-12-26
7 days 1832-05-03 1970-05-05 1832-05-01
10 days 1897-07-05 1970-06-07 1897-06-29
10 days 1906-02-08 1970-10-03 1906-02-01
2 months 1946-09-14 1970-07-05 1946-09-01
2 months 2000-01-01 1970-05-01 2000-01-01
2 months 2000-01-03 1970-08-20 1999-12-01
2 years 2004-05-20 1970-12-31 2002-12-01
2 years 2032-12-06 1969-07-01 2031-07-01
10 days infinity 1970-01-01 infinity
statement error
select time_bucket('-3 hours'::interval, '2019-04-05'::date);
----
statement error
select time_bucket('-3 hours'::interval, '2019-04-05'::date, '1 hour 30 minutes'::interval);
----
statement error
select time_bucket('-3 hours'::interval, '2019-04-05'::date, '2019-04-05'::date);
----
statement error
select time_bucket('-1 month'::interval, '2019-04-05'::date);
----
statement error
select time_bucket('-1 month'::interval, '2019-04-05'::date, '1 week'::interval);
----
statement error
select time_bucket('-1 month'::interval, '2019-04-05'::date, '2019-04-05'::date);
----
statement error
select time_bucket('1 day - 172800 seconds'::interval, '2018-05-05'::date);
----
statement error
select time_bucket('1 day - 172800 seconds'::interval, '2018-05-05'::date, '1 hour 30 minutes'::interval);
----
statement error
select time_bucket('1 day - 172800 seconds'::interval, '2018-05-05'::date, '2018-05-05'::date);
----
statement error
select time_bucket('1 month 1 day'::interval, '2018-05-05'::date);
----
statement error
select time_bucket('1 month 1 day'::interval, '2018-05-05'::date, '1 week'::interval);
----
statement error
select time_bucket('1 month 1 day'::interval, '2019-05-05'::date, '2019-05-05'::date);
----
statement error
select time_bucket('3 days'::interval, '2019-05-05'::date, '2000000000 months'::interval);
----
statement error
select time_bucket('3 days'::interval, '2019-05-05'::date, '-2000000000 months'::interval);
----
statement error
select time_bucket('3 months'::interval, '2019-05-05'::date, '2000000000 months'::interval);
----
statement error
select time_bucket('3 months'::interval, '2019-05-05'::date, '-2000000000 months'::interval);
----
statement error
select time_bucket('1 month'::interval, '5877642-06-25 (BC)'::date);
----
query I
select time_bucket('1 month'::interval, '5877642-07-01 (BC)'::date);
----
5877642-07-01 (BC)
statement error
select time_bucket('1 week'::interval, '5877642-07-01 (BC)'::date);
----
statement error
select time_bucket('1 month'::interval, '5881580-07-10'::date, '-1 day'::interval);
----
query I
select time_bucket('1 month'::interval, '5881580-07-10'::date);
----
5881580-07-01
statement error
select time_bucket('1 week'::interval, '290309-12-21 (BC)'::date);
----
statement error
select time_bucket('1 week'::interval, '290309-12-22 (BC)'::date);
----
statement error
select time_bucket('1 day'::interval, '290309-12-21 (BC)'::date);
----
query I
select time_bucket('1 day'::interval, '290309-12-22 (BC)'::date);
----
290309-12-22 (BC)
statement error
select time_bucket('1 week'::interval, '294247-01-11'::date);
----
query I
select time_bucket('1 week'::interval, '294247-01-10'::date);
----
294247-01-04
statement error
select time_bucket('1 day'::interval, '294247-01-11'::date);
----
query I
select time_bucket('1 day'::interval, '294247-01-10'::date);
----
294247-01-10
query I
select time_bucket('1 month 1 day'::interval, null::date);
----
NULL
query I
select time_bucket('1 month 1 day'::interval, null::date, '6 days'::interval);
----
NULL
query I
select time_bucket('1 month 1 day'::interval, null::date, '2022-12-20'::date);
----
NULL
query I
select time_bucket('-1 month'::interval, null::date);
----
NULL
query I
select time_bucket('-1 month'::interval, null::date, '6 days'::interval);
----
NULL
query I
select time_bucket('-1 month'::interval, '2022-12-22'::date, null::interval);
----
NULL
query I
select time_bucket('-1 month'::interval, null::date, '2022-12-20'::date);
----
NULL
query I
select time_bucket('-1 month'::interval, '2022-12-22'::date, null::date);
----
NULL
# non-foldable NULL testing
query T
WITH cte AS (
SELECT NULL::INTERVAL i,
NULL::DATE d,
NULL::TIMESTAMP t
FROM range(1)
)
SELECT time_bucket(i, d)
FROM cte
----
NULL
query T
WITH cte AS (
SELECT NULL::INTERVAL i,
NULL::DATE d,
NULL::TIMESTAMP t
FROM range(1)
)
SELECT time_bucket(i, t)
FROM cte
----
NULL
query T
WITH cte AS (
SELECT NULL::INTERVAL i,
NULL::DATE d,
NULL::TIMESTAMP t
FROM range(1)
)
SELECT time_bucket(i, d, i)
FROM cte
----
NULL
query T
WITH cte AS (
SELECT NULL::INTERVAL i,
NULL::DATE d,
NULL::TIMESTAMP t
FROM range(1)
)
SELECT time_bucket(i, t, i)
FROM cte
----
NULL
query T
WITH cte AS (
SELECT NULL::INTERVAL i,
NULL::DATE d,
NULL::TIMESTAMP t
FROM range(1)
)
SELECT time_bucket(i, d, d)
FROM cte
----
NULL
query T
WITH cte AS (
SELECT NULL::INTERVAL i,
NULL::DATE d,
NULL::TIMESTAMP t
FROM range(1)
)
SELECT time_bucket(i, t, t)
FROM cte
----
NULL