mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-08-12 09:19:44 +00:00
feat: impl date_add/date_sub functions (#2881)
* feat: adds date_add and date_sub function * test: add date function * fix: adds interval to date returns wrong result * fix: header * fix: typo * fix: timestamp resolution * fix: capacity * chore: apply suggestion * fix: wrong behavior when adding intervals to timestamp, date and datetime * chore: remove unused error * test: refactor and add some tests
This commit is contained in:
@@ -0,0 +1,164 @@
|
||||
SELECT date_add('2023-12-06 07:39:46.222'::TIMESTAMP_MS, INTERVAL '5 day');
|
||||
|
||||
+----------------------------------------------------------------------------------------+
|
||||
| date_add(Utf8("2023-12-06 07:39:46.222"),IntervalMonthDayNano("92233720368547758080")) |
|
||||
+----------------------------------------------------------------------------------------+
|
||||
| 2023-12-11T07:39:46.222 |
|
||||
+----------------------------------------------------------------------------------------+
|
||||
|
||||
SELECT date_add('2023-12-06 07:39:46.222'::TIMESTAMP_MS, '5 day');
|
||||
|
||||
+---------------------------------------------------------+
|
||||
| date_add(Utf8("2023-12-06 07:39:46.222"),Utf8("5 day")) |
|
||||
+---------------------------------------------------------+
|
||||
| 2023-12-11T07:39:46.222 |
|
||||
+---------------------------------------------------------+
|
||||
|
||||
SELECT date_add('2023-12-06'::DATE, INTERVAL '3 month 5 day');
|
||||
|
||||
+-------------------------------------------------------------------------------------+
|
||||
| date_add(Utf8("2023-12-06"),IntervalMonthDayNano("237684487635026733149179609088")) |
|
||||
+-------------------------------------------------------------------------------------+
|
||||
| 2024-03-11 |
|
||||
+-------------------------------------------------------------------------------------+
|
||||
|
||||
SELECT date_add('2023-12-06'::DATE, '3 month 5 day');
|
||||
|
||||
+----------------------------------------------------+
|
||||
| date_add(Utf8("2023-12-06"),Utf8("3 month 5 day")) |
|
||||
+----------------------------------------------------+
|
||||
| 2024-03-11 |
|
||||
+----------------------------------------------------+
|
||||
|
||||
SELECT date_sub('2023-12-06 07:39:46.222'::TIMESTAMP_MS, INTERVAL '5 day');
|
||||
|
||||
+----------------------------------------------------------------------------------------+
|
||||
| date_sub(Utf8("2023-12-06 07:39:46.222"),IntervalMonthDayNano("92233720368547758080")) |
|
||||
+----------------------------------------------------------------------------------------+
|
||||
| 2023-12-01T07:39:46.222 |
|
||||
+----------------------------------------------------------------------------------------+
|
||||
|
||||
SELECT date_sub('2023-12-06 07:39:46.222'::TIMESTAMP_MS, '5 day');
|
||||
|
||||
+---------------------------------------------------------+
|
||||
| date_sub(Utf8("2023-12-06 07:39:46.222"),Utf8("5 day")) |
|
||||
+---------------------------------------------------------+
|
||||
| 2023-12-01T07:39:46.222 |
|
||||
+---------------------------------------------------------+
|
||||
|
||||
SELECT date_sub('2023-12-06'::DATE, INTERVAL '3 month 5 day');
|
||||
|
||||
+-------------------------------------------------------------------------------------+
|
||||
| date_sub(Utf8("2023-12-06"),IntervalMonthDayNano("237684487635026733149179609088")) |
|
||||
+-------------------------------------------------------------------------------------+
|
||||
| 2023-09-01 |
|
||||
+-------------------------------------------------------------------------------------+
|
||||
|
||||
SELECT date_sub('2023-12-06'::DATE, '3 month 5 day');
|
||||
|
||||
+----------------------------------------------------+
|
||||
| date_sub(Utf8("2023-12-06"),Utf8("3 month 5 day")) |
|
||||
+----------------------------------------------------+
|
||||
| 2023-09-01 |
|
||||
+----------------------------------------------------+
|
||||
|
||||
CREATE TABLE dates(d DATE, ts timestamp time index);
|
||||
|
||||
Affected Rows: 0
|
||||
|
||||
INSERT INTO dates VALUES ('1992-01-01'::DATE, 1);
|
||||
|
||||
Affected Rows: 1
|
||||
|
||||
INSERT INTO dates VALUES ('1993-12-30'::DATE, 2);
|
||||
|
||||
Affected Rows: 1
|
||||
|
||||
INSERT INTO dates VALUES ('2023-12-06'::DATE, 3);
|
||||
|
||||
Affected Rows: 1
|
||||
|
||||
SELECT date_add(d, INTERVAL '1 year 2 month 3 day') from dates;
|
||||
|
||||
+---------------------------------------------------------------------------+
|
||||
| date_add(dates.d,IntervalMonthDayNano("1109194275255040958530743959552")) |
|
||||
+---------------------------------------------------------------------------+
|
||||
| 1993-03-04 |
|
||||
| 1995-03-03 |
|
||||
| 2025-02-09 |
|
||||
+---------------------------------------------------------------------------+
|
||||
|
||||
SELECT date_add(d, '1 year 2 month 3 day') from dates;
|
||||
|
||||
+------------------------------------------------+
|
||||
| date_add(dates.d,Utf8("1 year 2 month 3 day")) |
|
||||
+------------------------------------------------+
|
||||
| 1993-03-04 |
|
||||
| 1995-03-03 |
|
||||
| 2025-02-09 |
|
||||
+------------------------------------------------+
|
||||
|
||||
SELECT date_add(ts, INTERVAL '1 year 2 month 3 day') from dates;
|
||||
|
||||
+----------------------------------------------------------------------------+
|
||||
| date_add(dates.ts,IntervalMonthDayNano("1109194275255040958530743959552")) |
|
||||
+----------------------------------------------------------------------------+
|
||||
| 1971-03-04T00:00:00.001 |
|
||||
| 1971-03-04T00:00:00.002 |
|
||||
| 1971-03-04T00:00:00.003 |
|
||||
+----------------------------------------------------------------------------+
|
||||
|
||||
SELECT date_add(ts, '1 year 2 month 3 day') from dates;
|
||||
|
||||
+-------------------------------------------------+
|
||||
| date_add(dates.ts,Utf8("1 year 2 month 3 day")) |
|
||||
+-------------------------------------------------+
|
||||
| 1971-03-04T00:00:00.001 |
|
||||
| 1971-03-04T00:00:00.002 |
|
||||
| 1971-03-04T00:00:00.003 |
|
||||
+-------------------------------------------------+
|
||||
|
||||
SELECT date_sub(d, INTERVAL '1 year 2 month 3 day') from dates;
|
||||
|
||||
+---------------------------------------------------------------------------+
|
||||
| date_sub(dates.d,IntervalMonthDayNano("1109194275255040958530743959552")) |
|
||||
+---------------------------------------------------------------------------+
|
||||
| 1990-10-29 |
|
||||
| 1992-10-27 |
|
||||
| 2022-10-03 |
|
||||
+---------------------------------------------------------------------------+
|
||||
|
||||
SELECT date_sub(d, '1 year 2 month 3 day') from dates;
|
||||
|
||||
+------------------------------------------------+
|
||||
| date_sub(dates.d,Utf8("1 year 2 month 3 day")) |
|
||||
+------------------------------------------------+
|
||||
| 1990-10-29 |
|
||||
| 1992-10-27 |
|
||||
| 2022-10-03 |
|
||||
+------------------------------------------------+
|
||||
|
||||
SELECT date_sub(ts, INTERVAL '1 year 2 month 3 day') from dates;
|
||||
|
||||
+----------------------------------------------------------------------------+
|
||||
| date_sub(dates.ts,IntervalMonthDayNano("1109194275255040958530743959552")) |
|
||||
+----------------------------------------------------------------------------+
|
||||
| 1968-10-29T00:00:00.001 |
|
||||
| 1968-10-29T00:00:00.002 |
|
||||
| 1968-10-29T00:00:00.003 |
|
||||
+----------------------------------------------------------------------------+
|
||||
|
||||
SELECT date_sub(ts, '1 year 2 month 3 day') from dates;
|
||||
|
||||
+-------------------------------------------------+
|
||||
| date_sub(dates.ts,Utf8("1 year 2 month 3 day")) |
|
||||
+-------------------------------------------------+
|
||||
| 1968-10-29T00:00:00.001 |
|
||||
| 1968-10-29T00:00:00.002 |
|
||||
| 1968-10-29T00:00:00.003 |
|
||||
+-------------------------------------------------+
|
||||
|
||||
DROP TABLE dates;
|
||||
|
||||
Affected Rows: 0
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
SELECT date_add('2023-12-06 07:39:46.222'::TIMESTAMP_MS, INTERVAL '5 day');
|
||||
|
||||
SELECT date_add('2023-12-06 07:39:46.222'::TIMESTAMP_MS, '5 day');
|
||||
|
||||
SELECT date_add('2023-12-06'::DATE, INTERVAL '3 month 5 day');
|
||||
|
||||
SELECT date_add('2023-12-06'::DATE, '3 month 5 day');
|
||||
|
||||
SELECT date_sub('2023-12-06 07:39:46.222'::TIMESTAMP_MS, INTERVAL '5 day');
|
||||
|
||||
SELECT date_sub('2023-12-06 07:39:46.222'::TIMESTAMP_MS, '5 day');
|
||||
|
||||
SELECT date_sub('2023-12-06'::DATE, INTERVAL '3 month 5 day');
|
||||
|
||||
SELECT date_sub('2023-12-06'::DATE, '3 month 5 day');
|
||||
|
||||
|
||||
CREATE TABLE dates(d DATE, ts timestamp time index);
|
||||
|
||||
INSERT INTO dates VALUES ('1992-01-01'::DATE, 1);
|
||||
|
||||
INSERT INTO dates VALUES ('1993-12-30'::DATE, 2);
|
||||
|
||||
INSERT INTO dates VALUES ('2023-12-06'::DATE, 3);
|
||||
|
||||
SELECT date_add(d, INTERVAL '1 year 2 month 3 day') from dates;
|
||||
|
||||
SELECT date_add(d, '1 year 2 month 3 day') from dates;
|
||||
|
||||
SELECT date_add(ts, INTERVAL '1 year 2 month 3 day') from dates;
|
||||
|
||||
SELECT date_add(ts, '1 year 2 month 3 day') from dates;
|
||||
|
||||
SELECT date_sub(d, INTERVAL '1 year 2 month 3 day') from dates;
|
||||
|
||||
SELECT date_sub(d, '1 year 2 month 3 day') from dates;
|
||||
|
||||
SELECT date_sub(ts, INTERVAL '1 year 2 month 3 day') from dates;
|
||||
|
||||
SELECT date_sub(ts, '1 year 2 month 3 day') from dates;
|
||||
|
||||
DROP TABLE dates;
|
||||
Reference in New Issue
Block a user