mirror of
https://github.com/MariaDB/server.git
synced 2026-10-23 18:49:29 +03:00
fix(func): time functions fixes and tests.
This commit is contained in:
@@ -17,7 +17,7 @@ duckdb_kill : DEBUG sync points not implemented, timeout
|
||||
duckdb_numeric_func : ACOS domain error in DuckDB
|
||||
duckdb_refuse_xa : XA PREPARED state handling
|
||||
duckdb_sql_mode : strict GROUP BY in DuckDB
|
||||
duckdb_time_func : ADDDATE() not in DuckDB
|
||||
duckdb_time_func_unsupported : unsupported time functions
|
||||
rename_duckdb_table : server log warnings on cross-schema rename
|
||||
supported_copy_ddl : cross-schema rename not supported
|
||||
system_timezone : hangs on mariadbd-safe restart
|
||||
|
||||
516
storage/duckdb/mysql-test/duckdb/r/duckdb_time_func.result
Normal file
516
storage/duckdb/mysql-test/duckdb/r/duckdb_time_func.result
Normal file
@@ -0,0 +1,516 @@
|
||||
CREATE DATABASE test_duckdb;
|
||||
USE test_duckdb;
|
||||
CREATE TABLE t (id INT PRIMARY KEY) ENGINE = DuckDB;
|
||||
INSERT INTO t VALUES (1);
|
||||
---------------------------
|
||||
1. ADDDATE()
|
||||
---------------------------
|
||||
SELECT ADDDATE(DATE '2020-01-01', interval 1 day);
|
||||
ADDDATE(DATE '2020-01-01', interval 1 day)
|
||||
2020-01-02
|
||||
SELECT ADDDATE(DATE '2020-01-01', interval 1 day) FROM t;
|
||||
ADDDATE(DATE '2020-01-01', interval 1 day)
|
||||
2020-01-02
|
||||
SELECT ADDDATE(DATE '2020-01-01', interval 1 hour);
|
||||
ADDDATE(DATE '2020-01-01', interval 1 hour)
|
||||
2020-01-01 01:00:00
|
||||
SELECT ADDDATE(DATE '2020-01-01', interval 1 hour) FROM t;
|
||||
ADDDATE(DATE '2020-01-01', interval 1 hour)
|
||||
2020-01-01 01:00:00
|
||||
SELECT ADDDATE(DATE '2020-01-01', 1);
|
||||
ADDDATE(DATE '2020-01-01', 1)
|
||||
2020-01-02
|
||||
SELECT ADDDATE(DATE '2020-01-01', 1) FROM t;
|
||||
ADDDATE(DATE '2020-01-01', 1)
|
||||
2020-01-02
|
||||
SELECT ADDDATE(TIMESTAMP '2020-01-01 12:00:00', interval 1 day);
|
||||
ADDDATE(TIMESTAMP '2020-01-01 12:00:00', interval 1 day)
|
||||
2020-01-02 12:00:00
|
||||
SELECT ADDDATE(TIMESTAMP '2020-01-01 12:00:00', interval 1 day) FROM t;
|
||||
ADDDATE(TIMESTAMP '2020-01-01 12:00:00', interval 1 day)
|
||||
2020-01-02 12:00:00
|
||||
---------------------------
|
||||
2. ADDTIME()
|
||||
---------------------------
|
||||
SELECT addtime(TIMESTAMP '2007-12-31 23:59:59.999999', '1 1:1:1.000002');
|
||||
addtime(TIMESTAMP '2007-12-31 23:59:59.999999', '1 1:1:1.000002')
|
||||
2008-01-02 01:01:01.000001
|
||||
SELECT addtime(TIMESTAMP '2007-12-31 23:59:59.999999', '1 1:1:1.000002') FROM t;
|
||||
addtime(TIMESTAMP '2007-12-31 23:59:59.999999', '1 1:1:1.000002')
|
||||
2008-01-02 01:01:01.000001
|
||||
SELECT addtime(TIMESTAMP '2007-12-31 23:59:59.999999', '1:1:1.000002');
|
||||
addtime(TIMESTAMP '2007-12-31 23:59:59.999999', '1:1:1.000002')
|
||||
2008-01-01 01:01:01.000001
|
||||
SELECT addtime(TIMESTAMP '2007-12-31 23:59:59.999999', '1:1:1.000002') FROM t;
|
||||
addtime(TIMESTAMP '2007-12-31 23:59:59.999999', '1:1:1.000002')
|
||||
2008-01-01 01:01:01.000001
|
||||
---------------------------
|
||||
8. DATE()
|
||||
---------------------------
|
||||
SELECT DATE(TIMESTAMP '2003-12-31 01:02:03');
|
||||
DATE(TIMESTAMP '2003-12-31 01:02:03')
|
||||
2003-12-31
|
||||
SELECT DATE(TIMESTAMP '2003-12-31 01:02:03') FROM t;
|
||||
DATE(TIMESTAMP '2003-12-31 01:02:03')
|
||||
2003-12-31
|
||||
SELECT DATE(DATE '2003-12-31');
|
||||
DATE(DATE '2003-12-31')
|
||||
2003-12-31
|
||||
SELECT DATE(DATE '2003-12-31') FROM t;
|
||||
DATE(DATE '2003-12-31')
|
||||
2003-12-31
|
||||
---------------------------
|
||||
9. DATEDIFF()
|
||||
---------------------------
|
||||
SELECT DATEDIFF(TIMESTAMP '2007-12-31 23:59:59', DATE '2007-12-30');
|
||||
DATEDIFF(TIMESTAMP '2007-12-31 23:59:59', DATE '2007-12-30')
|
||||
1
|
||||
SELECT DATEDIFF(TIMESTAMP '2007-12-31 23:59:59', DATE '2007-12-30') FROM t;
|
||||
DATEDIFF(TIMESTAMP '2007-12-31 23:59:59', DATE '2007-12-30')
|
||||
1
|
||||
SELECT DATEDIFF(TIMESTAMP '2010-11-30 23:59:59', DATE '2010-12-31');
|
||||
DATEDIFF(TIMESTAMP '2010-11-30 23:59:59', DATE '2010-12-31')
|
||||
-31
|
||||
SELECT DATEDIFF(TIMESTAMP '2010-11-30 23:59:59', DATE '2010-12-31') FROM t;
|
||||
DATEDIFF(TIMESTAMP '2010-11-30 23:59:59', DATE '2010-12-31')
|
||||
-31
|
||||
---------------------------
|
||||
10. DATE_ADD()
|
||||
---------------------------
|
||||
SELECT DATE_ADD(DATE '2020-01-01', interval 1 day);
|
||||
DATE_ADD(DATE '2020-01-01', interval 1 day)
|
||||
2020-01-02
|
||||
SELECT DATE_ADD(DATE '2020-01-01', interval 1 day) FROM t;
|
||||
DATE_ADD(DATE '2020-01-01', interval 1 day)
|
||||
2020-01-02
|
||||
SELECT DATE_ADD(DATE '2020-01-01', interval 1 hour);
|
||||
DATE_ADD(DATE '2020-01-01', interval 1 hour)
|
||||
2020-01-01 01:00:00
|
||||
SELECT DATE_ADD(DATE '2020-01-01', interval 1 hour) FROM t;
|
||||
DATE_ADD(DATE '2020-01-01', interval 1 hour)
|
||||
2020-01-01 01:00:00
|
||||
SELECT DATE_ADD(TIMESTAMP '2020-01-01 12:00:00', interval 1 day);
|
||||
DATE_ADD(TIMESTAMP '2020-01-01 12:00:00', interval 1 day)
|
||||
2020-01-02 12:00:00
|
||||
SELECT DATE_ADD(TIMESTAMP '2020-01-01 12:00:00', interval 1 day) FROM t;
|
||||
DATE_ADD(TIMESTAMP '2020-01-01 12:00:00', interval 1 day)
|
||||
2020-01-02 12:00:00
|
||||
---------------------------
|
||||
12. DAY()
|
||||
---------------------------
|
||||
SELECT DAY(DATE '2007-02-03');
|
||||
DAY(DATE '2007-02-03')
|
||||
3
|
||||
SELECT DAY(DATE '2007-02-03') FROM t;
|
||||
DAY(DATE '2007-02-03')
|
||||
3
|
||||
SELECT DAY(TIMESTAMP '2007-02-03 22:23:00.123456');
|
||||
DAY(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
3
|
||||
SELECT DAY(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
DAY(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
3
|
||||
--------------------------
|
||||
13. DAYNAME()
|
||||
--------------------------
|
||||
SELECT DAYNAME(DATE '2007-02-03');
|
||||
DAYNAME(DATE '2007-02-03')
|
||||
Saturday
|
||||
SELECT DAYNAME(DATE '2007-02-03') FROM t;
|
||||
DAYNAME(DATE '2007-02-03')
|
||||
Saturday
|
||||
SELECT DAYNAME(TIMESTAMP '2007-02-03 22:23:00.123456');
|
||||
DAYNAME(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
Saturday
|
||||
SELECT DAYNAME(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
DAYNAME(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
Saturday
|
||||
--------------------------
|
||||
14. DAYOFMONTH()
|
||||
--------------------------
|
||||
SELECT DAYOFMONTH(DATE '2007-02-03');
|
||||
DAYOFMONTH(DATE '2007-02-03')
|
||||
3
|
||||
SELECT DAYOFMONTH(DATE '2007-02-03') FROM t;
|
||||
DAYOFMONTH(DATE '2007-02-03')
|
||||
3
|
||||
SELECT DAYOFMONTH(TIMESTAMP '2007-02-03 22:23:00.123456');
|
||||
DAYOFMONTH(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
3
|
||||
SELECT DAYOFMONTH(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
DAYOFMONTH(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
3
|
||||
--------------------------
|
||||
15. DAYOFWEEK()
|
||||
--------------------------
|
||||
SELECT DAYOFWEEK(DATE '2007-02-03');
|
||||
DAYOFWEEK(DATE '2007-02-03')
|
||||
7
|
||||
SELECT DAYOFWEEK(DATE '2007-02-03') FROM t;
|
||||
DAYOFWEEK(DATE '2007-02-03')
|
||||
7
|
||||
SELECT DAYOFWEEK(TIMESTAMP '2007-02-03 22:23:00.123456');
|
||||
DAYOFWEEK(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
7
|
||||
SELECT DAYOFWEEK(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
DAYOFWEEK(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
7
|
||||
--------------------------
|
||||
16. DAYOFYEAR()
|
||||
--------------------------
|
||||
SELECT DAYOFYEAR(DATE '2007-02-03');
|
||||
DAYOFYEAR(DATE '2007-02-03')
|
||||
34
|
||||
SELECT DAYOFYEAR(DATE '2007-02-03') FROM t;
|
||||
DAYOFYEAR(DATE '2007-02-03')
|
||||
34
|
||||
SELECT DAYOFYEAR(TIMESTAMP '2007-02-03 22:23:00.123456');
|
||||
DAYOFYEAR(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
34
|
||||
SELECT DAYOFYEAR(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
DAYOFYEAR(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
34
|
||||
--------------------------
|
||||
17. EXTRACT()
|
||||
--------------------------
|
||||
SELECT EXTRACT(YEAR FROM DATE '2019-07-02');
|
||||
EXTRACT(YEAR FROM DATE '2019-07-02')
|
||||
2019
|
||||
SELECT EXTRACT(HOUR FROM DATE '2019-07-02');
|
||||
EXTRACT(HOUR FROM DATE '2019-07-02')
|
||||
0
|
||||
SELECT EXTRACT(YEAR FROM DATE '2019-07-02') FROM t;
|
||||
EXTRACT(YEAR FROM DATE '2019-07-02')
|
||||
2019
|
||||
SELECT EXTRACT(HOUR FROM DATE '2019-07-02') FROM t;
|
||||
EXTRACT(HOUR FROM DATE '2019-07-02')
|
||||
0
|
||||
SELECT EXTRACT(YEAR FROM TIMESTAMP '2019-07-02 01:02:03');
|
||||
EXTRACT(YEAR FROM TIMESTAMP '2019-07-02 01:02:03')
|
||||
2019
|
||||
SELECT EXTRACT(HOUR FROM TIMESTAMP '2019-07-02 01:02:03');
|
||||
EXTRACT(HOUR FROM TIMESTAMP '2019-07-02 01:02:03')
|
||||
1
|
||||
SELECT EXTRACT(YEAR FROM TIMESTAMP '2019-07-02 01:02:03') FROM t;
|
||||
EXTRACT(YEAR FROM TIMESTAMP '2019-07-02 01:02:03')
|
||||
2019
|
||||
SELECT EXTRACT(HOUR FROM TIMESTAMP '2019-07-02 01:02:03') FROM t;
|
||||
EXTRACT(HOUR FROM TIMESTAMP '2019-07-02 01:02:03')
|
||||
1
|
||||
SELECT EXTRACT(HOUR FROM TIME '01:02:03');
|
||||
EXTRACT(HOUR FROM TIME '01:02:03')
|
||||
1
|
||||
SELECT EXTRACT(HOUR FROM TIME '01:02:03') FROM t;
|
||||
EXTRACT(HOUR FROM TIME '01:02:03')
|
||||
1
|
||||
--------------------------
|
||||
21. HOUR()
|
||||
--------------------------
|
||||
SELECT HOUR(TIME '10:05:03');
|
||||
HOUR(TIME '10:05:03')
|
||||
10
|
||||
SELECT HOUR(TIME '10:05:03') FROM t;
|
||||
HOUR(TIME '10:05:03')
|
||||
10
|
||||
SELECT HOUR(DATE '2019-07-02');
|
||||
HOUR(DATE '2019-07-02')
|
||||
0
|
||||
SELECT HOUR(DATE '2019-07-02') FROM t;
|
||||
HOUR(DATE '2019-07-02')
|
||||
0
|
||||
--------------------------
|
||||
22. LAST_DAY()
|
||||
--------------------------
|
||||
SELECT LAST_DAY(DATE '2003-02-05');
|
||||
LAST_DAY(DATE '2003-02-05')
|
||||
2003-02-28
|
||||
SELECT LAST_DAY(DATE '2003-02-05') FROM t;
|
||||
LAST_DAY(DATE '2003-02-05')
|
||||
2003-02-28
|
||||
SELECT LAST_DAY(DATE '2004-02-05');
|
||||
LAST_DAY(DATE '2004-02-05')
|
||||
2004-02-29
|
||||
SELECT LAST_DAY(DATE '2004-02-05') FROM t;
|
||||
LAST_DAY(DATE '2004-02-05')
|
||||
2004-02-29
|
||||
SELECT LAST_DAY(TIMESTAMP '2004-01-01 01:01:01');
|
||||
LAST_DAY(TIMESTAMP '2004-01-01 01:01:01')
|
||||
2004-01-31
|
||||
SELECT LAST_DAY(TIMESTAMP '2004-01-01 01:01:01') FROM t;
|
||||
LAST_DAY(TIMESTAMP '2004-01-01 01:01:01')
|
||||
2004-01-31
|
||||
--------------------------
|
||||
27. MICROSECOND()
|
||||
--------------------------
|
||||
SELECT MICROSECOND(DATE '2007-02-03');
|
||||
MICROSECOND(DATE '2007-02-03')
|
||||
0
|
||||
SELECT MICROSECOND(DATE '2007-02-03') FROM t;
|
||||
MICROSECOND(DATE '2007-02-03')
|
||||
0
|
||||
SELECT MICROSECOND(TIMESTAMP '2007-02-03 22:23:00.123456');
|
||||
MICROSECOND(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
123456
|
||||
SELECT MICROSECOND(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
MICROSECOND(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
123456
|
||||
SELECT MICROSECOND(TIME '22:23:00.123456');
|
||||
MICROSECOND(TIME '22:23:00.123456')
|
||||
123456
|
||||
SELECT MICROSECOND(TIME '22:23:00.123456') FROM t;
|
||||
MICROSECOND(TIME '22:23:00.123456')
|
||||
123456
|
||||
--------------------------
|
||||
28. MINUTE()
|
||||
--------------------------
|
||||
SELECT MINUTE(DATE '2007-02-03');
|
||||
MINUTE(DATE '2007-02-03')
|
||||
0
|
||||
SELECT MINUTE(DATE '2007-02-03') FROM t;
|
||||
MINUTE(DATE '2007-02-03')
|
||||
0
|
||||
SELECT MINUTE(TIMESTAMP '2007-02-03 22:23:00.123456');
|
||||
MINUTE(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
23
|
||||
SELECT MINUTE(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
MINUTE(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
23
|
||||
SELECT MINUTE(TIME '22:23:00.123456');
|
||||
MINUTE(TIME '22:23:00.123456')
|
||||
23
|
||||
SELECT MINUTE(TIME '22:23:00.123456') FROM t;
|
||||
MINUTE(TIME '22:23:00.123456')
|
||||
23
|
||||
--------------------------
|
||||
29. MONTHNAME()
|
||||
--------------------------
|
||||
SELECT MONTHNAME(DATE '2007-02-03');
|
||||
MONTHNAME(DATE '2007-02-03')
|
||||
February
|
||||
SELECT MONTHNAME(DATE '2007-02-03') FROM t;
|
||||
MONTHNAME(DATE '2007-02-03')
|
||||
February
|
||||
SELECT MONTHNAME(TIMESTAMP '2007-02-03 22:23:00.123456');
|
||||
MONTHNAME(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
February
|
||||
SELECT MONTHNAME(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
MONTHNAME(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
February
|
||||
--------------------------
|
||||
33. QUARTER()
|
||||
--------------------------
|
||||
SELECT QUARTER(DATE '2007-02-03');
|
||||
QUARTER(DATE '2007-02-03')
|
||||
1
|
||||
SELECT QUARTER(DATE '2007-02-03') FROM t;
|
||||
QUARTER(DATE '2007-02-03')
|
||||
1
|
||||
SELECT QUARTER(TIMESTAMP '2007-02-03 22:23:00.123456');
|
||||
QUARTER(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
1
|
||||
SELECT QUARTER(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
QUARTER(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
1
|
||||
--------------------------
|
||||
34. SECOND()
|
||||
--------------------------
|
||||
SELECT SECOND(DATE '2007-02-03');
|
||||
SECOND(DATE '2007-02-03')
|
||||
0
|
||||
SELECT SECOND(DATE '2007-02-03') FROM t;
|
||||
SECOND(DATE '2007-02-03')
|
||||
0
|
||||
SELECT SECOND(TIMESTAMP '2007-02-03 22:23:00.123456');
|
||||
SECOND(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
0
|
||||
SELECT SECOND(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
SECOND(TIMESTAMP '2007-02-03 22:23:00.123456')
|
||||
0
|
||||
SELECT SECOND(TIME '22:23:00.123456');
|
||||
SECOND(TIME '22:23:00.123456')
|
||||
0
|
||||
SELECT SECOND(TIME '22:23:00.123456') FROM t;
|
||||
SECOND(TIME '22:23:00.123456')
|
||||
0
|
||||
--------------------------
|
||||
37. SUBDATE()
|
||||
--------------------------
|
||||
SELECT SUBDATE(DATE '2020-01-01', interval 1 day);
|
||||
SUBDATE(DATE '2020-01-01', interval 1 day)
|
||||
2019-12-31
|
||||
SELECT SUBDATE(DATE '2020-01-01', interval 1 day) FROM t;
|
||||
SUBDATE(DATE '2020-01-01', interval 1 day)
|
||||
2019-12-31
|
||||
SELECT SUBDATE(DATE '2020-01-01', interval 1 hour);
|
||||
SUBDATE(DATE '2020-01-01', interval 1 hour)
|
||||
2019-12-31 23:00:00
|
||||
SELECT SUBDATE(DATE '2020-01-01', interval 1 hour) FROM t;
|
||||
SUBDATE(DATE '2020-01-01', interval 1 hour)
|
||||
2019-12-31 23:00:00
|
||||
SELECT SUBDATE(DATE '2020-01-01', 1);
|
||||
SUBDATE(DATE '2020-01-01', 1)
|
||||
2019-12-31
|
||||
SELECT SUBDATE(DATE '2020-01-01', 1) FROM t;
|
||||
SUBDATE(DATE '2020-01-01', 1)
|
||||
2019-12-31
|
||||
SELECT SUBDATE(TIMESTAMP '2020-01-01 12:00:00', interval 1 day);
|
||||
SUBDATE(TIMESTAMP '2020-01-01 12:00:00', interval 1 day)
|
||||
2019-12-31 12:00:00
|
||||
SELECT SUBDATE(TIMESTAMP '2020-01-01 12:00:00', interval 1 day) FROM t;
|
||||
SUBDATE(TIMESTAMP '2020-01-01 12:00:00', interval 1 day)
|
||||
2019-12-31 12:00:00
|
||||
--------------------------
|
||||
38. SUBTIME()
|
||||
--------------------------
|
||||
SELECT SUBTIME(TIMESTAMP '2007-12-31 23:59:59.999999', '1 1:1:1.000002');
|
||||
SUBTIME(TIMESTAMP '2007-12-31 23:59:59.999999', '1 1:1:1.000002')
|
||||
2007-12-30 22:58:58.999997
|
||||
SELECT SUBTIME(TIMESTAMP '2007-12-31 23:59:59.999999', '1 1:1:1.000002') FROM t;
|
||||
SUBTIME(TIMESTAMP '2007-12-31 23:59:59.999999', '1 1:1:1.000002')
|
||||
2007-12-30 22:58:58.999997
|
||||
SELECT SUBTIME(TIMESTAMP '2007-12-31 23:59:59.999999', '1:1:1.000002');
|
||||
SUBTIME(TIMESTAMP '2007-12-31 23:59:59.999999', '1:1:1.000002')
|
||||
2007-12-31 22:58:58.999997
|
||||
SELECT SUBTIME(TIMESTAMP '2007-12-31 23:59:59.999999', '1:1:1.000002') FROM t;
|
||||
SUBTIME(TIMESTAMP '2007-12-31 23:59:59.999999', '1:1:1.000002')
|
||||
2007-12-31 22:58:58.999997
|
||||
--------------------------
|
||||
44. TIME_TO_SEC()
|
||||
--------------------------
|
||||
SELECT TIME_TO_SEC(TIME '22:23:00');
|
||||
TIME_TO_SEC(TIME '22:23:00')
|
||||
80580
|
||||
SELECT TIME_TO_SEC(TIME '22:23:00') FROM t;
|
||||
TIME_TO_SEC(TIME '22:23:00')
|
||||
80580
|
||||
--------------------------
|
||||
45. TO_DAYS()
|
||||
--------------------------
|
||||
SELECT TO_DAYS('2007-10-07');
|
||||
TO_DAYS('2007-10-07')
|
||||
733321
|
||||
SELECT TO_DAYS('2007-10-07') FROM t;
|
||||
TO_DAYS('2007-10-07')
|
||||
733321
|
||||
--------------------------
|
||||
47. UNIX_TIMESTAMP()
|
||||
--------------------------
|
||||
SELECT UNIX_TIMESTAMP(TIMESTAMP '2015-11-13 10:20:19');
|
||||
UNIX_TIMESTAMP(TIMESTAMP '2015-11-13 10:20:19')
|
||||
1447410019
|
||||
SELECT UNIX_TIMESTAMP(TIMESTAMP '2015-11-13 10:20:19') FROM t;
|
||||
UNIX_TIMESTAMP(TIMESTAMP '2015-11-13 10:20:19')
|
||||
1447410019
|
||||
--------------------------
|
||||
51. WEEK()
|
||||
--------------------------
|
||||
SELECT WEEK(DATE '2009-01-01', 4);
|
||||
WEEK(DATE '2009-01-01', 4)
|
||||
0
|
||||
SELECT WEEK(DATE '2009-01-01', 4) FROM t;
|
||||
WEEK(DATE '2009-01-01', 4)
|
||||
0
|
||||
SELECT WEEK(DATE '2009-01-01', 5);
|
||||
WEEK(DATE '2009-01-01', 5)
|
||||
0
|
||||
SELECT WEEK(DATE '2009-01-01', 5) FROM t;
|
||||
WEEK(DATE '2009-01-01', 5)
|
||||
0
|
||||
SELECT WEEK(DATE '2009-01-01', 6);
|
||||
WEEK(DATE '2009-01-01', 6)
|
||||
53
|
||||
SELECT WEEK(DATE '2009-01-01', 6) FROM t;
|
||||
WEEK(DATE '2009-01-01', 6)
|
||||
53
|
||||
SELECT WEEK(DATE '2009-01-01', 7);
|
||||
WEEK(DATE '2009-01-01', 7)
|
||||
52
|
||||
SELECT WEEK(DATE '2009-01-01', 7) FROM t;
|
||||
WEEK(DATE '2009-01-01', 7)
|
||||
52
|
||||
--------------------------
|
||||
52. WEEKDAY()
|
||||
--------------------------
|
||||
SELECT WEEKDAY(TIMESTAMP '2008-02-03 22:23:00');
|
||||
WEEKDAY(TIMESTAMP '2008-02-03 22:23:00')
|
||||
6
|
||||
SELECT WEEKDAY(TIMESTAMP '2008-02-03 22:23:00') FROM t;
|
||||
WEEKDAY(TIMESTAMP '2008-02-03 22:23:00')
|
||||
6
|
||||
--------------------------
|
||||
53. WEEKOFYEAR()
|
||||
--------------------------
|
||||
SELECT WEEKOFYEAR(DATE '2008-02-20');
|
||||
WEEKOFYEAR(DATE '2008-02-20')
|
||||
8
|
||||
SELECT WEEKOFYEAR(DATE '2008-02-20') FROM t;
|
||||
WEEKOFYEAR(DATE '2008-02-20')
|
||||
8
|
||||
SELECT WEEKOFYEAR(TIMESTAMP '2008-02-03 22:23:00');
|
||||
WEEKOFYEAR(TIMESTAMP '2008-02-03 22:23:00')
|
||||
5
|
||||
SELECT WEEKOFYEAR(TIMESTAMP '2008-02-03 22:23:00') FROM t;
|
||||
WEEKOFYEAR(TIMESTAMP '2008-02-03 22:23:00')
|
||||
5
|
||||
--------------------------
|
||||
54. YEAR()
|
||||
--------------------------
|
||||
SELECT YEAR(DATE '1987-01-01');
|
||||
YEAR(DATE '1987-01-01')
|
||||
1987
|
||||
SELECT YEAR(DATE '1987-01-01') FROM t;
|
||||
YEAR(DATE '1987-01-01')
|
||||
1987
|
||||
SELECT YEAR(TIMESTAMP '1987-01-01 13:12:14');
|
||||
YEAR(TIMESTAMP '1987-01-01 13:12:14')
|
||||
1987
|
||||
SELECT YEAR(TIMESTAMP '1987-01-01 13:12:14') FROM t;
|
||||
YEAR(TIMESTAMP '1987-01-01 13:12:14')
|
||||
1987
|
||||
--------------------------
|
||||
55. YEARWEEK()
|
||||
--------------------------
|
||||
SELECT YEARWEEK(DATE '2009-01-01', 1);
|
||||
YEARWEEK(DATE '2009-01-01', 1)
|
||||
200901
|
||||
SELECT YEARWEEK(DATE '2009-01-01', 1) FROM t;
|
||||
YEARWEEK(DATE '2009-01-01', 1)
|
||||
200901
|
||||
SELECT YEARWEEK(DATE '2009-01-01', 2);
|
||||
YEARWEEK(DATE '2009-01-01', 2)
|
||||
200852
|
||||
SELECT YEARWEEK(DATE '2009-01-01', 2) FROM t;
|
||||
YEARWEEK(DATE '2009-01-01', 2)
|
||||
200852
|
||||
SELECT YEARWEEK(DATE '2009-01-01', 3);
|
||||
YEARWEEK(DATE '2009-01-01', 3)
|
||||
200901
|
||||
SELECT YEARWEEK(DATE '2009-01-01', 3) FROM t;
|
||||
YEARWEEK(DATE '2009-01-01', 3)
|
||||
200901
|
||||
SELECT YEARWEEK(DATE '2009-01-01', 4);
|
||||
YEARWEEK(DATE '2009-01-01', 4)
|
||||
200853
|
||||
SELECT YEARWEEK(DATE '2009-01-01', 4) FROM t;
|
||||
YEARWEEK(DATE '2009-01-01', 4)
|
||||
200853
|
||||
SELECT YEARWEEK(DATE '2009-01-01', 5);
|
||||
YEARWEEK(DATE '2009-01-01', 5)
|
||||
200852
|
||||
SELECT YEARWEEK(DATE '2009-01-01', 5) FROM t;
|
||||
YEARWEEK(DATE '2009-01-01', 5)
|
||||
200852
|
||||
SELECT YEARWEEK(DATE '2009-01-01', 6);
|
||||
YEARWEEK(DATE '2009-01-01', 6)
|
||||
200853
|
||||
SELECT YEARWEEK(DATE '2009-01-01', 6) FROM t;
|
||||
YEARWEEK(DATE '2009-01-01', 6)
|
||||
200853
|
||||
SELECT YEARWEEK(DATE '2009-01-01', 7);
|
||||
YEARWEEK(DATE '2009-01-01', 7)
|
||||
200852
|
||||
SELECT YEARWEEK(DATE '2009-01-01', 7) FROM t;
|
||||
YEARWEEK(DATE '2009-01-01', 7)
|
||||
200852
|
||||
DROP TABLE t;
|
||||
DROP DATABASE test_duckdb;
|
||||
@@ -11,6 +11,11 @@
|
||||
# 8. [Solved] For CURRENT_TIME(), CURRENT_TIMESTAMP(), CURTIME(), LOCALTIME(), LOCALTIMESTAMP(), NOW(), UTC_TIME(), UTC_TIMESTAMP(), the fsp argument is not support.
|
||||
# 9. MySQL accepts NULL as function input but DuckDB does not.
|
||||
# The above scenarios cannot guarantee compatibility and therefore will not appear in this test case.
|
||||
#
|
||||
# This test keeps only the SUPPORTED cases: deterministic queries on DATE /
|
||||
# TIMESTAMP literals (and TIME-component extraction) whose DuckDB pushdown
|
||||
# matches MariaDB. The incompatible / non-deterministic / erroring cases live
|
||||
# in duckdb_time_func_unsupported.test.
|
||||
|
||||
CREATE DATABASE test_duckdb;
|
||||
USE test_duckdb;
|
||||
@@ -28,14 +33,6 @@ SELECT ADDDATE(DATE '2020-01-01', 1);
|
||||
SELECT ADDDATE(DATE '2020-01-01', 1) FROM t;
|
||||
SELECT ADDDATE(TIMESTAMP '2020-01-01 12:00:00', interval 1 day);
|
||||
SELECT ADDDATE(TIMESTAMP '2020-01-01 12:00:00', interval 1 day) FROM t;
|
||||
SET timestamp = 1753226301;
|
||||
SELECT ADDDATE(TIME '12:00:00', interval 1 hour);
|
||||
SELECT ADDDATE(TIME '12:00:00', interval 1 hour) FROM t;
|
||||
|
||||
# Incompatibilities 7
|
||||
SELECT ADDDATE(TIME '12:00:00', interval 1 day);
|
||||
SELECT ADDDATE(TIME '12:00:00', interval 1 day) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 2. ADDTIME()
|
||||
@@ -46,85 +43,6 @@ SELECT addtime(TIMESTAMP '2007-12-31 23:59:59.999999', '1 1:1:1.000002') FROM t;
|
||||
SELECT addtime(TIMESTAMP '2007-12-31 23:59:59.999999', '1:1:1.000002');
|
||||
SELECT addtime(TIMESTAMP '2007-12-31 23:59:59.999999', '1:1:1.000002') FROM t;
|
||||
|
||||
# Incompatibilities 3
|
||||
SET timestamp = 1753226301;
|
||||
SELECT addtime(TIME '23:59:59.999999', '1 1:1:1.000002');
|
||||
SELECT addtime(TIME '23:59:59.999999', '1 1:1:1.000002') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 3. CONVERT_TZ()
|
||||
--echo ---------------------------
|
||||
|
||||
SELECT CONVERT_TZ(TIMESTAMP '2004-01-01 12:00:00','GMT','MET');
|
||||
SELECT CONVERT_TZ(TIMESTAMP '2004-01-01 12:00:00','GMT','MET') FROM t;
|
||||
|
||||
# timezone
|
||||
SELECT CONVERT_TZ(TIMESTAMP '2004-01-01 12:00:00','+00:00','+10:00');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT CONVERT_TZ(TIMESTAMP '2004-01-01 12:00:00','+00:00','+10:00') FROM t;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 4. CURDATE()
|
||||
--echo ---------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT CURDATE();
|
||||
SELECT CURDATE() FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 5. CURRENT_DATE, CURRENT_TIME()
|
||||
--echo ---------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT CURRENT_DATE;
|
||||
SELECT CURRENT_DATE FROM t;
|
||||
SELECT CURRENT_DATE();
|
||||
SELECT CURRENT_DATE() FROM t;
|
||||
|
||||
SELECT CURRENT_TIME;
|
||||
SELECT CURRENT_TIME FROM t;
|
||||
SELECT CURRENT_TIME();
|
||||
SELECT CURRENT_TIME() FROM t;
|
||||
|
||||
SELECT CURRENT_TIME(1);
|
||||
SELECT CURRENT_TIME(1) FROM t;
|
||||
|
||||
SELECT CURRENT_TIME(6);
|
||||
SELECT CURRENT_TIME(6) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 6. CURRENT_TIMESTAMP, CURRENT_TIMESTAMP()
|
||||
--echo ---------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT CURRENT_TIMESTAMP;
|
||||
SELECT CURRENT_TIMESTAMP FROM t;
|
||||
SELECT CURRENT_TIMESTAMP();
|
||||
SELECT CURRENT_TIMESTAMP() FROM t;
|
||||
|
||||
SELECT CURRENT_TIMESTAMP(1);
|
||||
SELECT CURRENT_TIMESTAMP(1) FROM t;
|
||||
SELECT CURRENT_TIMESTAMP(6);
|
||||
SELECT CURRENT_TIMESTAMP(6) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 7. CURTIME()
|
||||
--echo ---------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT CURTIME();
|
||||
SELECT CURTIME() FROM t;
|
||||
|
||||
SELECT CURTIME(1);
|
||||
SELECT CURTIME(1) FROM t;
|
||||
SELECT CURTIME(6);
|
||||
SELECT CURTIME(6) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 8. DATE()
|
||||
--echo ---------------------------
|
||||
@@ -134,13 +52,6 @@ SELECT DATE(TIMESTAMP '2003-12-31 01:02:03') FROM t;
|
||||
SELECT DATE(DATE '2003-12-31');
|
||||
SELECT DATE(DATE '2003-12-31') FROM t;
|
||||
|
||||
# Incompatibilities 7
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DATE(TIME '01:02:03');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT DATE(TIME '01:02:03') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 9. DATEDIFF()
|
||||
--echo ---------------------------
|
||||
@@ -150,13 +61,8 @@ SELECT DATEDIFF(TIMESTAMP '2007-12-31 23:59:59', DATE '2007-12-30') FROM t;
|
||||
SELECT DATEDIFF(TIMESTAMP '2010-11-30 23:59:59', DATE '2010-12-31');
|
||||
SELECT DATEDIFF(TIMESTAMP '2010-11-30 23:59:59', DATE '2010-12-31') FROM t;
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DATEDIFF(TIMESTAMP '2007-12-31 23:59:59', TIME '23:59:59');
|
||||
SELECT DATEDIFF(TIMESTAMP '2007-12-31 23:59:59', TIME '23:59:59') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 10. DATE_ADD(),DATE_SUB()
|
||||
--echo 10. DATE_ADD()
|
||||
--echo ---------------------------
|
||||
|
||||
SELECT DATE_ADD(DATE '2020-01-01', interval 1 day);
|
||||
@@ -165,50 +71,6 @@ SELECT DATE_ADD(DATE '2020-01-01', interval 1 hour);
|
||||
SELECT DATE_ADD(DATE '2020-01-01', interval 1 hour) FROM t;
|
||||
SELECT DATE_ADD(TIMESTAMP '2020-01-01 12:00:00', interval 1 day);
|
||||
SELECT DATE_ADD(TIMESTAMP '2020-01-01 12:00:00', interval 1 day) FROM t;
|
||||
SELECT DATE_ADD(TIME '12:00:00', interval 1 hour);
|
||||
SELECT DATE_ADD(TIME '12:00:00', interval 1 hour) FROM t;
|
||||
|
||||
# Incompatibilities 3
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DATE_ADD(TIME '12:00:00', interval 1 day);
|
||||
SELECT DATE_ADD(TIME '12:00:00', interval 1 day) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
SELECT DATE_SUB(DATE '2020-01-01', interval 1 day);
|
||||
SELECT DATE_SUB(DATE '2020-01-01', interval 1 day) FROM t;
|
||||
SELECT DATE_SUB(DATE '2020-01-01', interval 1 hour);
|
||||
SELECT DATE_SUB(DATE '2020-01-01', interval 1 hour) FROM t;
|
||||
SELECT DATE_SUB(TIMESTAMP '2020-01-01 12:00:00', interval 1 day);
|
||||
SELECT DATE_SUB(TIMESTAMP '2020-01-01 12:00:00', interval 1 day) FROM t;
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DATE_SUB(TIME '12:00:00', interval 1 hour);
|
||||
SELECT DATE_SUB(TIME '12:00:00', interval 1 hour) FROM t;
|
||||
|
||||
# Incompatibilities 7
|
||||
SELECT DATE_SUB(TIME '12:00:00', interval 1 day);
|
||||
SELECT DATE_SUB(TIME '12:00:00', interval 1 day) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 11. DATE_FORMAT()
|
||||
--echo ---------------------------
|
||||
|
||||
SELECT DATE_FORMAT(TIMESTAMP '2009-10-04 22:23:00.123456', '%a %b %c %D %d %e %f %H %h %I %i %j %k %l %M %m %p %r %S %s %T %W %w %Y %y %U %x %v');
|
||||
SELECT DATE_FORMAT(TIMESTAMP '2009-10-04 22:23:00.123456', '%a %b %c %D %d %e %f %H %h %I %i %j %k %l %M %m %p %r %S %s %T %W %w %Y %y %U %x %v') FROM t;
|
||||
|
||||
SELECT DATE_FORMAT(DATE '2009-10-04', '%a %b %c %D %d %e %f %H %h %I %i %j %k %l %M %m %p %r %S %s %T %W %w %Y %y %U %x %v');
|
||||
SELECT DATE_FORMAT(DATE '2009-10-04', '%a %b %c %D %d %e %f %H %h %I %i %j %k %l %M %m %p %r %S %s %T %W %w %Y %y %U %x %v') FROM t;
|
||||
|
||||
# Incompatibilities 3
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DATE_FORMAT(TIME '22:23:00.123456', '%a %b %c %D %d %e %f %H %h %I %i %j %k %l %M %m %p %r %S %s %T %W %w %Y %y %U %x %v');
|
||||
SELECT DATE_FORMAT(TIME '22:23:00.123456', '%a %b %c %D %d %e %f %H %h %I %i %j %k %l %M %m %p %r %S %s %T %W %w %Y %y %U %x %v') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
# Incompatibilities 6: %u, %V, %X is not supoorted now.
|
||||
SELECT DATE_FORMAT(TIMESTAMP '2009-10-04 22:23:00.123456', '%V, %X, %u');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT DATE_FORMAT(TIMESTAMP '2009-10-04 22:23:00.123456', '%V, %X, %u') FROM t;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 12. DAY()
|
||||
@@ -219,11 +81,6 @@ SELECT DAY(DATE '2007-02-03') FROM t;
|
||||
SELECT DAY(TIMESTAMP '2007-02-03 22:23:00.123456');
|
||||
SELECT DAY(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DAY(TIME '22:23:00.123456');
|
||||
SELECT DAY(TIME '22:23:00.123456') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 13. DAYNAME()
|
||||
--echo --------------------------
|
||||
@@ -233,11 +90,6 @@ SELECT DAYNAME(DATE '2007-02-03') FROM t;
|
||||
SELECT DAYNAME(TIMESTAMP '2007-02-03 22:23:00.123456');
|
||||
SELECT DAYNAME(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DAYNAME(TIME '22:23:00.123456');
|
||||
SELECT DAYNAME(TIME '22:23:00.123456') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 14. DAYOFMONTH()
|
||||
--echo --------------------------
|
||||
@@ -247,11 +99,6 @@ SELECT DAYOFMONTH(DATE '2007-02-03') FROM t;
|
||||
SELECT DAYOFMONTH(TIMESTAMP '2007-02-03 22:23:00.123456');
|
||||
SELECT DAYOFMONTH(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DAYOFMONTH(TIME '22:23:00.123456');
|
||||
SELECT DAYOFMONTH(TIME '22:23:00.123456') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 15. DAYOFWEEK()
|
||||
--echo --------------------------
|
||||
@@ -261,11 +108,6 @@ SELECT DAYOFWEEK(DATE '2007-02-03') FROM t;
|
||||
SELECT DAYOFWEEK(TIMESTAMP '2007-02-03 22:23:00.123456');
|
||||
SELECT DAYOFWEEK(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DAYOFWEEK(TIME '22:23:00.123456');
|
||||
SELECT DAYOFWEEK(TIME '22:23:00.123456') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 16. DAYOFYEAR()
|
||||
--echo --------------------------
|
||||
@@ -275,11 +117,6 @@ SELECT DAYOFYEAR(DATE '2007-02-03') FROM t;
|
||||
SELECT DAYOFYEAR(TIMESTAMP '2007-02-03 22:23:00.123456');
|
||||
SELECT DAYOFYEAR(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DAYOFYEAR(TIME '22:23:00.123456');
|
||||
SELECT DAYOFYEAR(TIME '22:23:00.123456') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 17. EXTRACT()
|
||||
--echo --------------------------
|
||||
@@ -297,36 +134,6 @@ SELECT EXTRACT(HOUR FROM TIMESTAMP '2019-07-02 01:02:03') FROM t;
|
||||
SELECT EXTRACT(HOUR FROM TIME '01:02:03');
|
||||
SELECT EXTRACT(HOUR FROM TIME '01:02:03') FROM t;
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT EXTRACT(YEAR FROM TIME '01:02:03');
|
||||
SELECT EXTRACT(YEAR FROM TIME '01:02:03') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 18. FROM_DAYS()
|
||||
--echo --------------------------
|
||||
|
||||
SELECT FROM_DAYS(0);
|
||||
SELECT FROM_DAYS(0) FROM t;
|
||||
SELECT FROM_DAYS(730669);
|
||||
SELECT FROM_DAYS(730669) FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 19. FROM_UNIXTIME()
|
||||
--echo --------------------------
|
||||
|
||||
SELECT FROM_UNIXTIME(1447430881);
|
||||
SELECT FROM_UNIXTIME(1447430881) FROM t;
|
||||
|
||||
SELECT FROM_UNIXTIME(1447430881, '%Y %D %M %h:%i:%s');
|
||||
SELECT FROM_UNIXTIME(1447430881, '%Y %D %M %h:%i:%s') FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 20. GET_FORMAT()
|
||||
--echo --------------------------
|
||||
|
||||
# Not support yet
|
||||
|
||||
--echo --------------------------
|
||||
--echo 21. HOUR()
|
||||
--echo --------------------------
|
||||
@@ -350,66 +157,6 @@ SELECT LAST_DAY(DATE '2004-02-05') FROM t;
|
||||
SELECT LAST_DAY(TIMESTAMP '2004-01-01 01:01:01');
|
||||
SELECT LAST_DAY(TIMESTAMP '2004-01-01 01:01:01') FROM t;
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT LAST_DAY(TIME '01:01:01');
|
||||
SELECT LAST_DAY(TIME '01:01:01') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 23. LOCALTIME, LOCALTIME()
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT LOCALTIME;
|
||||
SELECT LOCALTIME FROM t;
|
||||
SELECT LOCALTIME();
|
||||
SELECT LOCALTIME() FROM t;
|
||||
|
||||
SELECT LOCALTIME(1);
|
||||
SELECT LOCALTIME(1) FROM t;
|
||||
SELECT LOCALTIME(6);
|
||||
SELECT LOCALTIME(6) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 24. LOCALTIMESTAMP, LOCALTIMESTAMP()
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT LOCALTIMESTAMP;
|
||||
SELECT LOCALTIMESTAMP FROM t;
|
||||
SELECT LOCALTIMESTAMP();
|
||||
SELECT LOCALTIMESTAMP() FROM t;
|
||||
|
||||
SELECT LOCALTIMESTAMP(1);
|
||||
SELECT LOCALTIMESTAMP(1) FROM t;
|
||||
SELECT LOCALTIMESTAMP(6);
|
||||
SELECT LOCALTIMESTAMP(6) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 25. MAKEDATE()
|
||||
--echo --------------------------
|
||||
|
||||
SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);
|
||||
SELECT MAKEDATE(2011,31), MAKEDATE(2011,32) FROM t;
|
||||
SELECT MAKEDATE(2011,365), MAKEDATE(2014,365);
|
||||
SELECT MAKEDATE(2011,365), MAKEDATE(2014,365) FROM t;
|
||||
SELECT MAKEDATE(2011,0);
|
||||
SELECT MAKEDATE(2011,0) FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 26. MAKETIME()
|
||||
--echo --------------------------
|
||||
|
||||
SELECT MAKETIME(12,15,30);
|
||||
SELECT MAKETIME(12,15,30) FROM t;
|
||||
|
||||
# Incompatibilities 3
|
||||
SELECT MAKETIME(838,59,59);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT MAKETIME(838,59,59) FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 27. MICROSECOND()
|
||||
--echo --------------------------
|
||||
@@ -443,63 +190,6 @@ SELECT MONTHNAME(DATE '2007-02-03') FROM t;
|
||||
SELECT MONTHNAME(TIMESTAMP '2007-02-03 22:23:00.123456');
|
||||
SELECT MONTHNAME(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT MONTHNAME(TIME '22:23:00.123456');
|
||||
SELECT MONTHNAME(TIME '22:23:00.123456') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 30. NOW()
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT NOW();
|
||||
SELECT NOW() FROM t;
|
||||
|
||||
SELECT NOW(1);
|
||||
SELECT NOW(1) FROM t;
|
||||
|
||||
SELECT NOW(6);
|
||||
SELECT NOW(6) FROM t;
|
||||
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 31. PERIOD_ADD()
|
||||
--echo --------------------------
|
||||
|
||||
SELECT PERIOD_ADD(200801,2);
|
||||
SELECT PERIOD_ADD(200801,2) FROM t;
|
||||
SELECT PERIOD_ADD(801,2);
|
||||
SELECT PERIOD_ADD(801,2) FROM t;
|
||||
SELECT PERIOD_ADD(8801,2);
|
||||
SELECT PERIOD_ADD(8801,2) FROM t;
|
||||
SELECT PERIOD_ADD(1,2);
|
||||
SELECT PERIOD_ADD(1,2) FROM t;
|
||||
SELECT PERIOD_ADD(10101, 2);
|
||||
SELECT PERIOD_ADD(10101, 2) FROM t;
|
||||
|
||||
# The year range of duckdb only supports 0000~9999
|
||||
SELECT PERIOD_ADD(12340101, 2);
|
||||
SELECT PERIOD_ADD(12340101, 2) FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 32. PERIOD_DIFF()
|
||||
--echo --------------------------
|
||||
|
||||
SELECT PERIOD_DIFF(200801,801);
|
||||
SELECT PERIOD_DIFF(200801,801) FROM t;
|
||||
SELECT PERIOD_DIFF(200801,8801);
|
||||
SELECT PERIOD_DIFF(200801,8801) FROM t;
|
||||
SELECT PERIOD_DIFF(200801,1);
|
||||
SELECT PERIOD_DIFF(200801,1) FROM t;
|
||||
SELECT PERIOD_DIFF(200801,10101);
|
||||
SELECT PERIOD_DIFF(200801,10101) FROM t;
|
||||
|
||||
# The year range of duckdb only supports 0000~9999
|
||||
SELECT PERIOD_DIFF(200801, 12340101);
|
||||
SELECT PERIOD_DIFF(200801, 12340101) FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 33. QUARTER()
|
||||
--echo --------------------------
|
||||
@@ -509,11 +199,6 @@ SELECT QUARTER(DATE '2007-02-03') FROM t;
|
||||
SELECT QUARTER(TIMESTAMP '2007-02-03 22:23:00.123456');
|
||||
SELECT QUARTER(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT QUARTER(TIME '22:23:00.123456');
|
||||
SELECT QUARTER(TIME '22:23:00.123456') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 34. SECOND()
|
||||
--echo --------------------------
|
||||
@@ -526,44 +211,6 @@ SELECT SECOND(TIMESTAMP '2007-02-03 22:23:00.123456') FROM t;
|
||||
SELECT SECOND(TIME '22:23:00.123456');
|
||||
SELECT SECOND(TIME '22:23:00.123456') FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 35. SEC_TO_TIME()
|
||||
--echo --------------------------
|
||||
|
||||
SELECT SEC_TO_TIME(10000);
|
||||
SELECT SEC_TO_TIME(10000) FROM t;
|
||||
|
||||
# Incompatibilities 3
|
||||
SELECT SEC_TO_TIME(100000);
|
||||
SELECT SEC_TO_TIME(100000) FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 36. STR_TO_DATE()
|
||||
--echo --------------------------
|
||||
|
||||
SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y');
|
||||
SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y') FROM t;
|
||||
|
||||
SELECT STR_TO_DATE('a09:30:17','a%h:%i:%s');
|
||||
SELECT STR_TO_DATE('a09:30:17','a%h:%i:%s') FROM t;
|
||||
|
||||
SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y');
|
||||
SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y') FROM t;
|
||||
|
||||
SELECT STR_TO_DATE('a09:30:17','%h:%i:%s');
|
||||
SELECT STR_TO_DATE('a09:30:17','%h:%i:%s') FROM t;
|
||||
|
||||
SELECT STR_TO_DATE('abc','abc');
|
||||
SELECT STR_TO_DATE('abc','abc') FROM t;
|
||||
|
||||
SELECT STR_TO_DATE('9','%m');
|
||||
SELECT STR_TO_DATE('9','%m') FROM t;
|
||||
|
||||
SELECT STR_TO_DATE('09:30:17a','%h:%i:%s');
|
||||
SELECT STR_TO_DATE('09:30:17a','%h:%i:%s') FROM t;
|
||||
|
||||
# Besides, the sql_mode will affect sql results in MySQL.
|
||||
|
||||
--echo --------------------------
|
||||
--echo 37. SUBDATE()
|
||||
--echo --------------------------
|
||||
@@ -576,14 +223,6 @@ SELECT SUBDATE(DATE '2020-01-01', 1);
|
||||
SELECT SUBDATE(DATE '2020-01-01', 1) FROM t;
|
||||
SELECT SUBDATE(TIMESTAMP '2020-01-01 12:00:00', interval 1 day);
|
||||
SELECT SUBDATE(TIMESTAMP '2020-01-01 12:00:00', interval 1 day) FROM t;
|
||||
SET timestamp = 1753226301;
|
||||
SELECT SUBDATE(TIME '12:00:00', interval 1 hour);
|
||||
SELECT SUBDATE(TIME '12:00:00', interval 1 hour) FROM t;
|
||||
|
||||
# Incompatibilities 7
|
||||
SELECT SUBDATE(TIME '12:00:00', interval 1 day);
|
||||
SELECT SUBDATE(TIME '12:00:00', interval 1 day) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 38. SUBTIME()
|
||||
@@ -594,70 +233,6 @@ SELECT SUBTIME(TIMESTAMP '2007-12-31 23:59:59.999999', '1 1:1:1.000002') FROM t;
|
||||
SELECT SUBTIME(TIMESTAMP '2007-12-31 23:59:59.999999', '1:1:1.000002');
|
||||
SELECT SUBTIME(TIMESTAMP '2007-12-31 23:59:59.999999', '1:1:1.000002') FROM t;
|
||||
|
||||
# Incompatibilities 3
|
||||
SELECT SUBTIME(TIME '23:59:59.999999', '1 1:1:1.000002');
|
||||
SELECT SUBTIME(TIME '23:59:59.999999', '1 1:1:1.000002') FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 39. SYSDATE()
|
||||
--echo --------------------------
|
||||
|
||||
# SELECT SYSDATE();
|
||||
# SELECT SYSDATE() FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 40. TIME()
|
||||
--echo --------------------------
|
||||
|
||||
# Not support yet
|
||||
|
||||
--echo --------------------------
|
||||
--echo 41. TIMEDIFF()
|
||||
--echo --------------------------
|
||||
|
||||
# Not support yet
|
||||
|
||||
--echo --------------------------
|
||||
--echo 42. TIMESTAMP()
|
||||
--echo --------------------------
|
||||
|
||||
# Not support yet
|
||||
|
||||
--echo --------------------------
|
||||
--echo 42. TIMESTAMPADD()
|
||||
--echo --------------------------
|
||||
|
||||
SELECT TIMESTAMPADD(MINUTE, 1, DATE '2003-01-02');
|
||||
SELECT TIMESTAMPADD(MINUTE, 1, DATE '2003-01-02') FROM t;
|
||||
|
||||
SELECT TIMESTAMPADD(WEEK, 1, DATE '2003-01-02');
|
||||
SELECT TIMESTAMPADD(WEEK, 1, DATE '2003-01-02') FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 43. TIMESTAMPDIFF()
|
||||
--echo --------------------------
|
||||
|
||||
SELECT TIMESTAMPDIFF(MONTH, DATE '2003-02-01', DATE '2003-05-01');
|
||||
SELECT TIMESTAMPDIFF(MONTH, DATE '2003-02-01', DATE '2003-05-01') FROM t;
|
||||
|
||||
SELECT TIMESTAMPDIFF(YEAR, DATE '2002-05-01', DATE '2001-01-01');
|
||||
SELECT TIMESTAMPDIFF(YEAR, DATE '2002-05-01', DATE '2001-01-01') FROM t;
|
||||
|
||||
SELECT TIMESTAMPDIFF(MINUTE, DATE '2003-02-01', TIMESTAMP '2003-05-01 12:05:55');
|
||||
SELECT TIMESTAMPDIFF(MINUTE, DATE '2003-02-01', TIMESTAMP '2003-05-01 12:05:55') FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 44. TIME_FORMAT()
|
||||
--echo --------------------------
|
||||
|
||||
SELECT TIME_FORMAT(TIME '01:02:03', '%H %k %h %I %l');
|
||||
SELECT TIME_FORMAT(TIME '01:02:03', '%H %k %h %I %l') FROM t;
|
||||
|
||||
# Incompatibilities 3
|
||||
SELECT TIME_FORMAT(TIME '100:02:03', '%H %k %h %I %l');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT TIME_FORMAT(TIME '100:02:03', '%H %k %h %I %l') FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 44. TIME_TO_SEC()
|
||||
--echo --------------------------
|
||||
@@ -665,11 +240,6 @@ SELECT TIME_FORMAT(TIME '100:02:03', '%H %k %h %I %l') FROM t;
|
||||
SELECT TIME_TO_SEC(TIME '22:23:00');
|
||||
SELECT TIME_TO_SEC(TIME '22:23:00') FROM t;
|
||||
|
||||
# Incompatibilities 3
|
||||
SELECT TIME_TO_SEC(TIME '220:23:00');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT TIME_TO_SEC(TIME '220:23:00') FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 45. TO_DAYS()
|
||||
--echo --------------------------
|
||||
@@ -677,28 +247,6 @@ SELECT TIME_TO_SEC(TIME '220:23:00') FROM t;
|
||||
SELECT TO_DAYS('2007-10-07');
|
||||
SELECT TO_DAYS('2007-10-07') FROM t;
|
||||
|
||||
# Incompatibilities 7
|
||||
SET timestamp = 1753226301;
|
||||
SELECT TO_DAYS(TIME '12:00:00');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT TO_DAYS(TIME '12:00:00') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 46. TO_SECONDS()
|
||||
--echo --------------------------
|
||||
|
||||
SELECT TO_SECONDS(DATE '2009-11-29');
|
||||
SELECT TO_SECONDS(DATE '2009-11-29') FROM t;
|
||||
|
||||
SELECT TO_SECONDS(TIMESTAMP '2009-11-29 13:43:32');
|
||||
SELECT TO_SECONDS(TIMESTAMP '2009-11-29 13:43:32') FROM t;
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT TO_SECONDS(TIME '12:00:00');
|
||||
SELECT TO_SECONDS(TIME '12:00:00') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 47. UNIX_TIMESTAMP()
|
||||
--echo --------------------------
|
||||
@@ -706,71 +254,10 @@ SET timestamp = default;
|
||||
SELECT UNIX_TIMESTAMP(TIMESTAMP '2015-11-13 10:20:19');
|
||||
SELECT UNIX_TIMESTAMP(TIMESTAMP '2015-11-13 10:20:19') FROM t;
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT UNIX_TIMESTAMP();
|
||||
SELECT UNIX_TIMESTAMP() FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 48. UTC_DATE()
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT UTC_DATE();
|
||||
SELECT UTC_DATE() FROM t;
|
||||
SELECT UTC_DATE;
|
||||
SELECT UTC_DATE FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 49. UTC_TIME()
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT UTC_TIME();
|
||||
SELECT UTC_TIME() FROM t;
|
||||
SELECT UTC_TIME;
|
||||
SELECT UTC_TIME FROM t;
|
||||
SELECT UTC_TIME(1);
|
||||
SELECT UTC_TIME(1) FROM t;
|
||||
SELECT UTC_TIME(6);
|
||||
SELECT UTC_TIME(6) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 50. UTC_TIMESTAMP()
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT UTC_TIMESTAMP();
|
||||
SELECT UTC_TIMESTAMP() FROM t;
|
||||
SELECT UTC_TIMESTAMP;
|
||||
SELECT UTC_TIMESTAMP FROM t;
|
||||
|
||||
SELECT UTC_TIMESTAMP(1);
|
||||
SELECT UTC_TIMESTAMP(1) FROM t;
|
||||
SELECT UTC_TIMESTAMP(6);
|
||||
SELECT UTC_TIMESTAMP(6) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 51. WEEK()
|
||||
--echo --------------------------
|
||||
|
||||
SELECT WEEK(DATE '2009-01-01');
|
||||
SELECT WEEK(DATE '2009-01-01') FROM t;
|
||||
set @old_default_week_format = @@default_week_format;
|
||||
set default_week_format = 1;
|
||||
SELECT WEEK(DATE '2009-01-01');
|
||||
SELECT WEEK(DATE '2009-01-01') FROM t;
|
||||
set default_week_format = 2;
|
||||
SELECT WEEK(DATE '2009-01-01');
|
||||
SELECT WEEK(DATE '2009-01-01') FROM t;
|
||||
set default_week_format = 3;
|
||||
SELECT WEEK(DATE '2009-01-01');
|
||||
SELECT WEEK(DATE '2009-01-01') FROM t;
|
||||
set default_week_format = @old_default_week_format;
|
||||
|
||||
SELECT WEEK(DATE '2009-01-01', 4);
|
||||
SELECT WEEK(DATE '2009-01-01', 4) FROM t;
|
||||
SELECT WEEK(DATE '2009-01-01', 5);
|
||||
@@ -796,11 +283,6 @@ SELECT WEEKOFYEAR(DATE '2008-02-20') FROM t;
|
||||
SELECT WEEKOFYEAR(TIMESTAMP '2008-02-03 22:23:00');
|
||||
SELECT WEEKOFYEAR(TIMESTAMP '2008-02-03 22:23:00') FROM t;
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT WEEKOFYEAR(TIME '12:20:22');
|
||||
SELECT WEEKOFYEAR(TIME '12:20:22') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 54. YEAR()
|
||||
--echo --------------------------
|
||||
@@ -810,24 +292,10 @@ SELECT YEAR(DATE '1987-01-01') FROM t;
|
||||
SELECT YEAR(TIMESTAMP '1987-01-01 13:12:14');
|
||||
SELECT YEAR(TIMESTAMP '1987-01-01 13:12:14') FROM t;
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT YEAR(TIME '12:20:22');
|
||||
SELECT YEAR(TIME '12:20:22') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 55. YEARWEEK()
|
||||
--echo --------------------------
|
||||
|
||||
SELECT YEARWEEK(DATE '2009-01-01');
|
||||
SELECT YEARWEEK(DATE '2009-01-01') FROM t;
|
||||
|
||||
set @old_default_week_format = @@default_week_format;
|
||||
set default_week_format = 1;
|
||||
SELECT YEARWEEK(DATE '2009-01-01');
|
||||
SELECT YEARWEEK(DATE '2009-01-01') FROM t;
|
||||
set default_week_format = @old_default_week_format;
|
||||
|
||||
SELECT YEARWEEK(DATE '2009-01-01', 1);
|
||||
SELECT YEARWEEK(DATE '2009-01-01', 1) FROM t;
|
||||
SELECT YEARWEEK(DATE '2009-01-01', 2);
|
||||
|
||||
@@ -0,0 +1,698 @@
|
||||
--source ../include/have_duckdb.inc
|
||||
|
||||
# Unsupported / incompatible date-time functions for DuckDB pushdown.
|
||||
# This is the companion of duckdb_time_func.test which keeps only the
|
||||
# supported (deterministic and matching) cases.
|
||||
#
|
||||
# The queries below are collected here because their "FROM t" pushdown to
|
||||
# DuckDB either:
|
||||
# (a) is non-deterministic - current-time functions return DuckDB's real
|
||||
# clock, which never matches MariaDB's SET timestamp value;
|
||||
# (b) is a hard error - DuckDB lacks the signature (TIME input,
|
||||
# different function meaning, unsupported format specifier);
|
||||
# (c) produces a mismatch - different convention (WEEKDAY numbering,
|
||||
# default_week_format not honoured by DuckDB).
|
||||
#
|
||||
# Incompatibility references (see duckdb_time_func.test header):
|
||||
# 3 - MySQL time range -838:59:59..838:59:59 vs DuckDB 00:00:00..23:59:59
|
||||
# 6 - DuckDB does not honour default_week_format
|
||||
# 7 - TIME implicitly converted to TIMESTAMP: MySQL uses current_date,
|
||||
# DuckDB uses 1970-01-01 or cannot convert
|
||||
# 8 - fsp argument not supported for current-time functions
|
||||
|
||||
CREATE DATABASE test_duckdb;
|
||||
USE test_duckdb;
|
||||
CREATE TABLE t (id INT PRIMARY KEY) ENGINE = DuckDB;
|
||||
INSERT INTO t VALUES (1);
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 1. ADDDATE() - TIME input (incompatibility 7)
|
||||
--echo ---------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT ADDDATE(TIME '12:00:00', interval 1 hour);
|
||||
SELECT ADDDATE(TIME '12:00:00', interval 1 hour) FROM t;
|
||||
SELECT ADDDATE(TIME '12:00:00', interval 1 day);
|
||||
SELECT ADDDATE(TIME '12:00:00', interval 1 day) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 2. ADDTIME() - TIME input (incompatibility 3)
|
||||
--echo ---------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT addtime(TIME '23:59:59.999999', '1 1:1:1.000002');
|
||||
SELECT addtime(TIME '23:59:59.999999', '1 1:1:1.000002') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 3. CONVERT_TZ() - numeric offset unsupported
|
||||
--echo ---------------------------
|
||||
|
||||
SELECT CONVERT_TZ(TIMESTAMP '2004-01-01 12:00:00','+00:00','+10:00');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT CONVERT_TZ(TIMESTAMP '2004-01-01 12:00:00','+00:00','+10:00') FROM t;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 4. CURDATE() - non-deterministic
|
||||
--echo ---------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT CURDATE();
|
||||
SELECT CURDATE() FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 5. CURRENT_DATE, CURRENT_TIME() - non-deterministic
|
||||
--echo ---------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT CURRENT_DATE;
|
||||
SELECT CURRENT_DATE FROM t;
|
||||
SELECT CURRENT_DATE();
|
||||
SELECT CURRENT_DATE() FROM t;
|
||||
|
||||
SELECT CURRENT_TIME;
|
||||
SELECT CURRENT_TIME FROM t;
|
||||
SELECT CURRENT_TIME();
|
||||
SELECT CURRENT_TIME() FROM t;
|
||||
|
||||
SELECT CURRENT_TIME(1);
|
||||
SELECT CURRENT_TIME(1) FROM t;
|
||||
|
||||
SELECT CURRENT_TIME(6);
|
||||
SELECT CURRENT_TIME(6) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 6. CURRENT_TIMESTAMP, CURRENT_TIMESTAMP() - non-deterministic
|
||||
--echo ---------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT CURRENT_TIMESTAMP;
|
||||
SELECT CURRENT_TIMESTAMP FROM t;
|
||||
SELECT CURRENT_TIMESTAMP();
|
||||
SELECT CURRENT_TIMESTAMP() FROM t;
|
||||
|
||||
SELECT CURRENT_TIMESTAMP(1);
|
||||
SELECT CURRENT_TIMESTAMP(1) FROM t;
|
||||
SELECT CURRENT_TIMESTAMP(6);
|
||||
SELECT CURRENT_TIMESTAMP(6) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 7. CURTIME() - non-deterministic
|
||||
--echo ---------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT CURTIME();
|
||||
SELECT CURTIME() FROM t;
|
||||
|
||||
SELECT CURTIME(1);
|
||||
SELECT CURTIME(1) FROM t;
|
||||
SELECT CURTIME(6);
|
||||
SELECT CURTIME(6) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 8. DATE() - TIME input (incompatibility 7)
|
||||
--echo ---------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DATE(TIME '01:02:03');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT DATE(TIME '01:02:03') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 9. DATEDIFF() - TIME input (incompatibility 7)
|
||||
--echo ---------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DATEDIFF(TIMESTAMP '2007-12-31 23:59:59', TIME '23:59:59');
|
||||
SELECT DATEDIFF(TIMESTAMP '2007-12-31 23:59:59', TIME '23:59:59') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 10. DATE_ADD(),DATE_SUB() - TIME input (incompatibility 3,7)
|
||||
--echo ---------------------------
|
||||
|
||||
SELECT DATE_ADD(TIME '12:00:00', interval 1 hour);
|
||||
SELECT DATE_ADD(TIME '12:00:00', interval 1 hour) FROM t;
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DATE_ADD(TIME '12:00:00', interval 1 day);
|
||||
SELECT DATE_ADD(TIME '12:00:00', interval 1 day) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DATE_SUB(TIME '12:00:00', interval 1 hour);
|
||||
SELECT DATE_SUB(TIME '12:00:00', interval 1 hour) FROM t;
|
||||
|
||||
SELECT DATE_SUB(TIME '12:00:00', interval 1 day);
|
||||
SELECT DATE_SUB(TIME '12:00:00', interval 1 day) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo ---------------------------
|
||||
--echo 11. DATE_FORMAT() - TIME input & unsupported specifiers (incompatibility 3,6)
|
||||
--echo ---------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DATE_FORMAT(TIME '22:23:00.123456', '%a %b %c %D %d %e %f %H %h %I %i %j %k %l %M %m %p %r %S %s %T %W %w %Y %y %U %x %v');
|
||||
SELECT DATE_FORMAT(TIME '22:23:00.123456', '%a %b %c %D %d %e %f %H %h %I %i %j %k %l %M %m %p %r %S %s %T %W %w %Y %y %U %x %v') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
# %u, %V, %X are not supported
|
||||
SELECT DATE_FORMAT(TIMESTAMP '2009-10-04 22:23:00.123456', '%V, %X, %u');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT DATE_FORMAT(TIMESTAMP '2009-10-04 22:23:00.123456', '%V, %X, %u') FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 12. DAY() - TIME input (incompatibility 7)
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DAY(TIME '22:23:00.123456');
|
||||
SELECT DAY(TIME '22:23:00.123456') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 13. DAYNAME() - TIME input (incompatibility 7)
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DAYNAME(TIME '22:23:00.123456');
|
||||
SELECT DAYNAME(TIME '22:23:00.123456') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 14. DAYOFMONTH() - TIME input (incompatibility 7)
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DAYOFMONTH(TIME '22:23:00.123456');
|
||||
SELECT DAYOFMONTH(TIME '22:23:00.123456') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 15. DAYOFWEEK() - TIME input (incompatibility 7)
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DAYOFWEEK(TIME '22:23:00.123456');
|
||||
SELECT DAYOFWEEK(TIME '22:23:00.123456') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 16. DAYOFYEAR() - TIME input (incompatibility 7)
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT DAYOFYEAR(TIME '22:23:00.123456');
|
||||
SELECT DAYOFYEAR(TIME '22:23:00.123456') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 17. EXTRACT() - YEAR FROM TIME (incompatibility 7)
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT EXTRACT(YEAR FROM TIME '01:02:03');
|
||||
SELECT EXTRACT(YEAR FROM TIME '01:02:03') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 22. LAST_DAY() - TIME input (incompatibility 7)
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT LAST_DAY(TIME '01:01:01');
|
||||
SELECT LAST_DAY(TIME '01:01:01') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 23. LOCALTIME, LOCALTIME() - non-deterministic
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT LOCALTIME;
|
||||
SELECT LOCALTIME FROM t;
|
||||
SELECT LOCALTIME();
|
||||
SELECT LOCALTIME() FROM t;
|
||||
|
||||
SELECT LOCALTIME(1);
|
||||
SELECT LOCALTIME(1) FROM t;
|
||||
SELECT LOCALTIME(6);
|
||||
SELECT LOCALTIME(6) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 24. LOCALTIMESTAMP, LOCALTIMESTAMP() - non-deterministic
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT LOCALTIMESTAMP;
|
||||
SELECT LOCALTIMESTAMP FROM t;
|
||||
SELECT LOCALTIMESTAMP();
|
||||
SELECT LOCALTIMESTAMP() FROM t;
|
||||
|
||||
SELECT LOCALTIMESTAMP(1);
|
||||
SELECT LOCALTIMESTAMP(1) FROM t;
|
||||
SELECT LOCALTIMESTAMP(6);
|
||||
SELECT LOCALTIMESTAMP(6) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 26. MAKETIME() - out of DuckDB time range (incompatibility 3)
|
||||
--echo --------------------------
|
||||
|
||||
SELECT MAKETIME(838,59,59);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT MAKETIME(838,59,59) FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 29. MONTHNAME() - TIME input (incompatibility 7)
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT MONTHNAME(TIME '22:23:00.123456');
|
||||
SELECT MONTHNAME(TIME '22:23:00.123456') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 30. NOW() - non-deterministic
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT NOW();
|
||||
SELECT NOW() FROM t;
|
||||
|
||||
SELECT NOW(1);
|
||||
SELECT NOW(1) FROM t;
|
||||
|
||||
SELECT NOW(6);
|
||||
SELECT NOW(6) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 33. QUARTER() - TIME input (incompatibility 7)
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT QUARTER(TIME '22:23:00.123456');
|
||||
SELECT QUARTER(TIME '22:23:00.123456') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 37. SUBDATE() - TIME input (incompatibility 7)
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT SUBDATE(TIME '12:00:00', interval 1 hour);
|
||||
SELECT SUBDATE(TIME '12:00:00', interval 1 hour) FROM t;
|
||||
|
||||
SELECT SUBDATE(TIME '12:00:00', interval 1 day);
|
||||
SELECT SUBDATE(TIME '12:00:00', interval 1 day) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 35. SEC_TO_TIME() - out of DuckDB time range (incompatibility 3)
|
||||
--echo --------------------------
|
||||
|
||||
SELECT SEC_TO_TIME(100000);
|
||||
SELECT SEC_TO_TIME(100000) FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 38. SUBTIME() - TIME input (incompatibility 3)
|
||||
--echo --------------------------
|
||||
|
||||
SELECT SUBTIME(TIME '23:59:59.999999', '1 1:1:1.000002');
|
||||
SELECT SUBTIME(TIME '23:59:59.999999', '1 1:1:1.000002') FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 39. SYSDATE() - not supported yet
|
||||
--echo --------------------------
|
||||
|
||||
# SELECT SYSDATE();
|
||||
# SELECT SYSDATE() FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 40. TIME() - not supported yet
|
||||
--echo --------------------------
|
||||
|
||||
--echo --------------------------
|
||||
--echo 41. TIMEDIFF() - not supported yet
|
||||
--echo --------------------------
|
||||
|
||||
--echo --------------------------
|
||||
--echo 42. TIMESTAMP() - not supported yet
|
||||
--echo --------------------------
|
||||
|
||||
--echo --------------------------
|
||||
--echo 42. TIMESTAMPADD() - not in DuckDB; unit keyword unbindable
|
||||
--echo --------------------------
|
||||
|
||||
SELECT TIMESTAMPADD(MINUTE, 1, DATE '2003-01-02');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT TIMESTAMPADD(MINUTE, 1, DATE '2003-01-02') FROM t;
|
||||
|
||||
SELECT TIMESTAMPADD(WEEK, 1, DATE '2003-01-02');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT TIMESTAMPADD(WEEK, 1, DATE '2003-01-02') FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 43. TIMESTAMPDIFF() - not in DuckDB; unit keyword unbindable
|
||||
--echo --------------------------
|
||||
|
||||
SELECT TIMESTAMPDIFF(MONTH, DATE '2003-02-01', DATE '2003-05-01');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT TIMESTAMPDIFF(MONTH, DATE '2003-02-01', DATE '2003-05-01') FROM t;
|
||||
|
||||
SELECT TIMESTAMPDIFF(YEAR, DATE '2002-05-01', DATE '2001-01-01');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT TIMESTAMPDIFF(YEAR, DATE '2002-05-01', DATE '2001-01-01') FROM t;
|
||||
|
||||
SELECT TIMESTAMPDIFF(MINUTE, DATE '2003-02-01', TIMESTAMP '2003-05-01 12:05:55');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT TIMESTAMPDIFF(MINUTE, DATE '2003-02-01', TIMESTAMP '2003-05-01 12:05:55') FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 44. TIME_FORMAT() - time_format() not in DuckDB (also incompatibility 3 for >24h)
|
||||
--echo --------------------------
|
||||
|
||||
SELECT TIME_FORMAT(TIME '01:02:03', '%H %k %h %I %l');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT TIME_FORMAT(TIME '01:02:03', '%H %k %h %I %l') FROM t;
|
||||
|
||||
SELECT TIME_FORMAT(TIME '100:02:03', '%H %k %h %I %l');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT TIME_FORMAT(TIME '100:02:03', '%H %k %h %I %l') FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 44. TIME_TO_SEC() - out of DuckDB time range (incompatibility 3)
|
||||
--echo --------------------------
|
||||
|
||||
SELECT TIME_TO_SEC(TIME '220:23:00');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT TIME_TO_SEC(TIME '220:23:00') FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 45. TO_DAYS() - TIME input (incompatibility 7)
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT TO_DAYS(TIME '12:00:00');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT TO_DAYS(TIME '12:00:00') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 46. TO_SECONDS() - DuckDB to_seconds() builds an INTERVAL, not seconds
|
||||
--echo --------------------------
|
||||
|
||||
SELECT TO_SECONDS(DATE '2009-11-29');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT TO_SECONDS(DATE '2009-11-29') FROM t;
|
||||
|
||||
SELECT TO_SECONDS(TIMESTAMP '2009-11-29 13:43:32');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT TO_SECONDS(TIMESTAMP '2009-11-29 13:43:32') FROM t;
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT TO_SECONDS(TIME '12:00:00');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT TO_SECONDS(TIME '12:00:00') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 47. UNIX_TIMESTAMP() - no-arg form is non-deterministic
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT UNIX_TIMESTAMP();
|
||||
SELECT UNIX_TIMESTAMP() FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 48. UTC_DATE() - non-deterministic; bareword resolved as column
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT UTC_DATE();
|
||||
SELECT UTC_DATE() FROM t;
|
||||
SELECT UTC_DATE;
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT UTC_DATE FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 49. UTC_TIME() - non-deterministic; bareword resolved as column
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT UTC_TIME();
|
||||
SELECT UTC_TIME() FROM t;
|
||||
SELECT UTC_TIME;
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT UTC_TIME FROM t;
|
||||
SELECT UTC_TIME(1);
|
||||
SELECT UTC_TIME(1) FROM t;
|
||||
SELECT UTC_TIME(6);
|
||||
SELECT UTC_TIME(6) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 50. UTC_TIMESTAMP() - non-deterministic; bareword resolved as column
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT UTC_TIMESTAMP();
|
||||
SELECT UTC_TIMESTAMP() FROM t;
|
||||
SELECT UTC_TIMESTAMP;
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT UTC_TIMESTAMP FROM t;
|
||||
|
||||
SELECT UTC_TIMESTAMP(1);
|
||||
SELECT UTC_TIMESTAMP(1) FROM t;
|
||||
SELECT UTC_TIMESTAMP(6);
|
||||
SELECT UTC_TIMESTAMP(6) FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 51. WEEK() - single-arg default_week_format not honoured (incompatibility 6)
|
||||
--echo --------------------------
|
||||
|
||||
SELECT WEEK(DATE '2009-01-01');
|
||||
SELECT WEEK(DATE '2009-01-01') FROM t;
|
||||
set @old_default_week_format = @@default_week_format;
|
||||
set default_week_format = 1;
|
||||
SELECT WEEK(DATE '2009-01-01');
|
||||
SELECT WEEK(DATE '2009-01-01') FROM t;
|
||||
set default_week_format = 2;
|
||||
SELECT WEEK(DATE '2009-01-01');
|
||||
SELECT WEEK(DATE '2009-01-01') FROM t;
|
||||
set default_week_format = 3;
|
||||
SELECT WEEK(DATE '2009-01-01');
|
||||
SELECT WEEK(DATE '2009-01-01') FROM t;
|
||||
set default_week_format = @old_default_week_format;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 53. WEEKOFYEAR() - TIME input (incompatibility 7)
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT WEEKOFYEAR(TIME '12:20:22');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT WEEKOFYEAR(TIME '12:20:22') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 54. YEAR() - TIME input (incompatibility 7)
|
||||
--echo --------------------------
|
||||
|
||||
SET timestamp = 1753226301;
|
||||
SELECT YEAR(TIME '12:20:22');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT YEAR(TIME '12:20:22') FROM t;
|
||||
SET timestamp = default;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 55. YEARWEEK() - single-arg default_week_format not honoured (incompatibility 6)
|
||||
--echo --------------------------
|
||||
|
||||
SELECT YEARWEEK(DATE '2009-01-01');
|
||||
SELECT YEARWEEK(DATE '2009-01-01') FROM t;
|
||||
|
||||
set @old_default_week_format = @@default_week_format;
|
||||
set default_week_format = 1;
|
||||
SELECT YEARWEEK(DATE '2009-01-01');
|
||||
SELECT YEARWEEK(DATE '2009-01-01') FROM t;
|
||||
set default_week_format = @old_default_week_format;
|
||||
|
||||
--echo ==========================================================
|
||||
--echo Functions absent in DuckDB (base DATE/TIMESTAMP/numeric cases)
|
||||
--echo ==========================================================
|
||||
|
||||
--echo --------------------------
|
||||
--echo 3. CONVERT_TZ() - named zone: MariaDB returns NULL without tz tables
|
||||
--echo --------------------------
|
||||
|
||||
SELECT CONVERT_TZ(TIMESTAMP '2004-01-01 12:00:00','GMT','MET');
|
||||
SELECT CONVERT_TZ(TIMESTAMP '2004-01-01 12:00:00','GMT','MET') FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 10. DATE_SUB() - date_sub(DATE/TIMESTAMP, INTERVAL) not in DuckDB
|
||||
--echo --------------------------
|
||||
|
||||
SELECT DATE_SUB(DATE '2020-01-01', interval 1 day);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT DATE_SUB(DATE '2020-01-01', interval 1 day) FROM t;
|
||||
SELECT DATE_SUB(DATE '2020-01-01', interval 1 hour);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT DATE_SUB(DATE '2020-01-01', interval 1 hour) FROM t;
|
||||
SELECT DATE_SUB(TIMESTAMP '2020-01-01 12:00:00', interval 1 day);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT DATE_SUB(TIMESTAMP '2020-01-01 12:00:00', interval 1 day) FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 11. DATE_FORMAT() - date_format() not in DuckDB
|
||||
--echo --------------------------
|
||||
|
||||
SELECT DATE_FORMAT(TIMESTAMP '2009-10-04 22:23:00.123456', '%a %b %c %D %d %e %f %H %h %I %i %j %k %l %M %m %p %r %S %s %T %W %w %Y %y %U %x %v');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT DATE_FORMAT(TIMESTAMP '2009-10-04 22:23:00.123456', '%a %b %c %D %d %e %f %H %h %I %i %j %k %l %M %m %p %r %S %s %T %W %w %Y %y %U %x %v') FROM t;
|
||||
|
||||
SELECT DATE_FORMAT(DATE '2009-10-04', '%a %b %c %D %d %e %f %H %h %I %i %j %k %l %M %m %p %r %S %s %T %W %w %Y %y %U %x %v');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT DATE_FORMAT(DATE '2009-10-04', '%a %b %c %D %d %e %f %H %h %I %i %j %k %l %M %m %p %r %S %s %T %W %w %Y %y %U %x %v') FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 18. FROM_DAYS() - from_days() not in DuckDB
|
||||
--echo --------------------------
|
||||
|
||||
SELECT FROM_DAYS(0);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT FROM_DAYS(0) FROM t;
|
||||
SELECT FROM_DAYS(730669);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT FROM_DAYS(730669) FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 19. FROM_UNIXTIME() - from_unixtime() not in DuckDB
|
||||
--echo --------------------------
|
||||
|
||||
SELECT FROM_UNIXTIME(1447430881);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT FROM_UNIXTIME(1447430881) FROM t;
|
||||
|
||||
SELECT FROM_UNIXTIME(1447430881, '%Y %D %M %h:%i:%s');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT FROM_UNIXTIME(1447430881, '%Y %D %M %h:%i:%s') FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 25. MAKEDATE() - makedate() not in DuckDB (has make_date)
|
||||
--echo --------------------------
|
||||
|
||||
SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT MAKEDATE(2011,31), MAKEDATE(2011,32) FROM t;
|
||||
SELECT MAKEDATE(2011,365), MAKEDATE(2014,365);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT MAKEDATE(2011,365), MAKEDATE(2014,365) FROM t;
|
||||
SELECT MAKEDATE(2011,0);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT MAKEDATE(2011,0) FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 26. MAKETIME() - maketime() not in DuckDB (has make_time)
|
||||
--echo --------------------------
|
||||
|
||||
SELECT MAKETIME(12,15,30);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT MAKETIME(12,15,30) FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 31. PERIOD_ADD() - period_add() not in DuckDB
|
||||
--echo --------------------------
|
||||
|
||||
SELECT PERIOD_ADD(200801,2);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT PERIOD_ADD(200801,2) FROM t;
|
||||
SELECT PERIOD_ADD(801,2);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT PERIOD_ADD(801,2) FROM t;
|
||||
SELECT PERIOD_ADD(8801,2);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT PERIOD_ADD(8801,2) FROM t;
|
||||
SELECT PERIOD_ADD(1,2);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT PERIOD_ADD(1,2) FROM t;
|
||||
SELECT PERIOD_ADD(10101, 2);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT PERIOD_ADD(10101, 2) FROM t;
|
||||
SELECT PERIOD_ADD(12340101, 2);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT PERIOD_ADD(12340101, 2) FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 32. PERIOD_DIFF() - period_diff() not in DuckDB
|
||||
--echo --------------------------
|
||||
|
||||
SELECT PERIOD_DIFF(200801,801);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT PERIOD_DIFF(200801,801) FROM t;
|
||||
SELECT PERIOD_DIFF(200801,8801);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT PERIOD_DIFF(200801,8801) FROM t;
|
||||
SELECT PERIOD_DIFF(200801,1);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT PERIOD_DIFF(200801,1) FROM t;
|
||||
SELECT PERIOD_DIFF(200801,10101);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT PERIOD_DIFF(200801,10101) FROM t;
|
||||
SELECT PERIOD_DIFF(200801, 12340101);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT PERIOD_DIFF(200801, 12340101) FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 35. SEC_TO_TIME() - sec_to_time() not in DuckDB
|
||||
--echo --------------------------
|
||||
|
||||
SELECT SEC_TO_TIME(10000);
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT SEC_TO_TIME(10000) FROM t;
|
||||
|
||||
--echo --------------------------
|
||||
--echo 36. STR_TO_DATE() - str_to_date() not in DuckDB
|
||||
--echo --------------------------
|
||||
|
||||
SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y') FROM t;
|
||||
|
||||
SELECT STR_TO_DATE('a09:30:17','a%h:%i:%s');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT STR_TO_DATE('a09:30:17','a%h:%i:%s') FROM t;
|
||||
|
||||
SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y') FROM t;
|
||||
|
||||
SELECT STR_TO_DATE('a09:30:17','%h:%i:%s');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT STR_TO_DATE('a09:30:17','%h:%i:%s') FROM t;
|
||||
|
||||
SELECT STR_TO_DATE('abc','abc');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT STR_TO_DATE('abc','abc') FROM t;
|
||||
|
||||
SELECT STR_TO_DATE('9','%m');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT STR_TO_DATE('9','%m') FROM t;
|
||||
|
||||
SELECT STR_TO_DATE('09:30:17a','%h:%i:%s');
|
||||
--error ER_GET_ERRMSG
|
||||
SELECT STR_TO_DATE('09:30:17a','%h:%i:%s') FROM t;
|
||||
|
||||
DROP TABLE t;
|
||||
DROP DATABASE test_duckdb;
|
||||
@@ -138,6 +138,20 @@ bool DuckdbManager::Initialize()
|
||||
"(d1::DATE - d2::DATE)");
|
||||
con->Query("CREATE OR REPLACE MACRO curdate() AS current_date");
|
||||
con->Query("CREATE OR REPLACE MACRO curtime(fsp := 0) AS current_time");
|
||||
/* utc_time/utc_timestamp/utc_date — UTC wall-clock; fsp ignored */
|
||||
con->Query("CREATE OR REPLACE MACRO utc_timestamp(fsp := 0) AS "
|
||||
"timezone('UTC', now())::TIMESTAMP");
|
||||
con->Query("CREATE OR REPLACE MACRO utc_time(fsp := 0) AS "
|
||||
"timezone('UTC', now())::TIME");
|
||||
con->Query("CREATE OR REPLACE MACRO utc_date() AS "
|
||||
"timezone('UTC', now())::DATE");
|
||||
/* unix_timestamp([ts]) — epoch seconds; no arg = now() */
|
||||
con->Query("CREATE OR REPLACE MACRO unix_timestamp(ts := now()) AS "
|
||||
"epoch(ts)::BIGINT");
|
||||
/* time_to_sec(t) — seconds since midnight */
|
||||
con->Query("CREATE OR REPLACE MACRO time_to_sec(t) AS "
|
||||
"(date_part('hour', t)*3600 + date_part('minute', t)*60 "
|
||||
"+ date_part('second', t))::BIGINT");
|
||||
/* convert_tz(ts, from_tz, to_tz) */
|
||||
con->Query("CREATE OR REPLACE MACRO convert_tz(ts, from_tz, to_tz) AS "
|
||||
"timezone(to_tz, timezone(from_tz, ts))");
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
#include "duckdb/function/function_set.hpp"
|
||||
#include "duckdb/parser/parsed_data/create_scalar_function_info.hpp"
|
||||
#include "duckdb/common/types/timestamp.hpp"
|
||||
#include "duckdb/common/types/date.hpp"
|
||||
#include "duckdb/main/database.hpp"
|
||||
#include "duckdb/main/connection.hpp"
|
||||
|
||||
@@ -1065,6 +1066,260 @@ static void regexp_replace_global_func(duckdb::DataChunk &args,
|
||||
}
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
WEEK(date, mode) / YEARWEEK(date, mode)
|
||||
DuckDB builtins only accept a single argument. MariaDB pushes
|
||||
down the 2-arg form which carries the week-format mode.
|
||||
|
||||
Logic ported from MariaDB sql_time.cc / sql-common/my_time.c:
|
||||
calc_daynr(), calc_days_in_year(), calc_weekday(), calc_week().
|
||||
================================================================ */
|
||||
|
||||
/* MariaDB week_behaviour bit flags (sql/sql_time.h) */
|
||||
static constexpr uint32_t MC_WEEK_MONDAY_FIRST= 1;
|
||||
static constexpr uint32_t MC_WEEK_YEAR= 2;
|
||||
static constexpr uint32_t MC_WEEK_FIRST_WEEKDAY= 4;
|
||||
|
||||
static uint32_t mc_week_mode(uint32_t mode)
|
||||
{
|
||||
uint32_t week_format= (mode & 7);
|
||||
if (!(week_format & MC_WEEK_MONDAY_FIRST))
|
||||
week_format^= MC_WEEK_FIRST_WEEKDAY;
|
||||
return week_format;
|
||||
}
|
||||
|
||||
static uint32_t mc_calc_days_in_year(uint32_t year)
|
||||
{
|
||||
return ((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year)))
|
||||
? 366
|
||||
: 365;
|
||||
}
|
||||
|
||||
static long mc_calc_daynr(uint32_t year, uint32_t month, uint32_t day)
|
||||
{
|
||||
long delsum;
|
||||
int temp;
|
||||
int y= (int) year;
|
||||
|
||||
if (y == 0 && month == 0)
|
||||
return 0;
|
||||
delsum= (long) (365 * y + 31 * ((int) month - 1) + (int) day);
|
||||
if (month <= 2)
|
||||
y--;
|
||||
else
|
||||
delsum-= (long) ((int) month * 4 + 23) / 10;
|
||||
temp= (int) ((y / 100 + 1) * 3) / 4;
|
||||
return delsum + y / 4 - temp;
|
||||
}
|
||||
|
||||
static int mc_calc_weekday(long daynr, bool sunday_first_day_of_week)
|
||||
{
|
||||
return (int) ((daynr + 5L + (sunday_first_day_of_week ? 1L : 0L)) % 7);
|
||||
}
|
||||
|
||||
static uint32_t mc_calc_week(uint32_t l_year, uint32_t l_month, uint32_t l_day,
|
||||
uint32_t week_behaviour, uint32_t *year)
|
||||
{
|
||||
uint32_t days;
|
||||
long daynr= mc_calc_daynr(l_year, l_month, l_day);
|
||||
long first_daynr= mc_calc_daynr(l_year, 1, 1);
|
||||
bool monday_first= (week_behaviour & MC_WEEK_MONDAY_FIRST) != 0;
|
||||
bool week_year= (week_behaviour & MC_WEEK_YEAR) != 0;
|
||||
bool first_weekday= (week_behaviour & MC_WEEK_FIRST_WEEKDAY) != 0;
|
||||
|
||||
uint32_t weekday= (uint32_t) mc_calc_weekday(first_daynr, !monday_first);
|
||||
*year= l_year;
|
||||
|
||||
if (l_month == 1 && l_day <= 7 - weekday)
|
||||
{
|
||||
if (!week_year &&
|
||||
((first_weekday && weekday != 0) ||
|
||||
(!first_weekday && weekday >= 4)))
|
||||
return 0;
|
||||
week_year= true;
|
||||
(*year)--;
|
||||
first_daynr-= (days= mc_calc_days_in_year(*year));
|
||||
weekday= (weekday + 53 * 7 - days) % 7;
|
||||
}
|
||||
|
||||
if ((first_weekday && weekday != 0) ||
|
||||
(!first_weekday && weekday >= 4))
|
||||
days= daynr - (first_daynr + (7 - weekday));
|
||||
else
|
||||
days= daynr - (first_daynr - weekday);
|
||||
|
||||
if (week_year && days >= 52 * 7)
|
||||
{
|
||||
weekday= (weekday + mc_calc_days_in_year(*year)) % 7;
|
||||
if ((!first_weekday && weekday < 4) ||
|
||||
(first_weekday && weekday == 0))
|
||||
{
|
||||
(*year)++;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return days / 7 + 1;
|
||||
}
|
||||
|
||||
/* WEEK(DATE, INTEGER) -> BIGINT */
|
||||
static void week_2arg_date_func(duckdb::DataChunk &args,
|
||||
duckdb::ExpressionState &,
|
||||
duckdb::Vector &result)
|
||||
{
|
||||
duckdb::BinaryExecutor::Execute<duckdb::date_t, int32_t, int64_t>(
|
||||
args.data[0], args.data[1], result, args.size(),
|
||||
[](duckdb::date_t d, int32_t mode) -> int64_t {
|
||||
int32_t y, m, day;
|
||||
duckdb::Date::Convert(d, y, m, day);
|
||||
uint32_t year;
|
||||
return (int64_t) mc_calc_week((uint32_t) y, (uint32_t) m,
|
||||
(uint32_t) day,
|
||||
mc_week_mode((uint32_t) mode), &year);
|
||||
});
|
||||
}
|
||||
|
||||
/* WEEK(TIMESTAMP, INTEGER) -> BIGINT */
|
||||
static void week_2arg_ts_func(duckdb::DataChunk &args,
|
||||
duckdb::ExpressionState &,
|
||||
duckdb::Vector &result)
|
||||
{
|
||||
duckdb::BinaryExecutor::Execute<duckdb::timestamp_t, int32_t, int64_t>(
|
||||
args.data[0], args.data[1], result, args.size(),
|
||||
[](duckdb::timestamp_t ts, int32_t mode) -> int64_t {
|
||||
int32_t y, m, day;
|
||||
duckdb::Date::Convert(duckdb::Timestamp::GetDate(ts), y, m, day);
|
||||
uint32_t year;
|
||||
return (int64_t) mc_calc_week((uint32_t) y, (uint32_t) m,
|
||||
(uint32_t) day,
|
||||
mc_week_mode((uint32_t) mode), &year);
|
||||
});
|
||||
}
|
||||
|
||||
/* YEARWEEK(DATE, INTEGER) -> BIGINT */
|
||||
static void yearweek_2arg_date_func(duckdb::DataChunk &args,
|
||||
duckdb::ExpressionState &,
|
||||
duckdb::Vector &result)
|
||||
{
|
||||
duckdb::BinaryExecutor::Execute<duckdb::date_t, int32_t, int64_t>(
|
||||
args.data[0], args.data[1], result, args.size(),
|
||||
[](duckdb::date_t d, int32_t mode) -> int64_t {
|
||||
int32_t y, m, day;
|
||||
duckdb::Date::Convert(d, y, m, day);
|
||||
uint32_t year;
|
||||
uint32_t week= mc_calc_week(
|
||||
(uint32_t) y, (uint32_t) m, (uint32_t) day,
|
||||
mc_week_mode((uint32_t) mode) | MC_WEEK_YEAR, &year);
|
||||
return (int64_t) (week + year * 100);
|
||||
});
|
||||
}
|
||||
|
||||
/* YEARWEEK(TIMESTAMP, INTEGER) -> BIGINT */
|
||||
static void yearweek_2arg_ts_func(duckdb::DataChunk &args,
|
||||
duckdb::ExpressionState &,
|
||||
duckdb::Vector &result)
|
||||
{
|
||||
duckdb::BinaryExecutor::Execute<duckdb::timestamp_t, int32_t, int64_t>(
|
||||
args.data[0], args.data[1], result, args.size(),
|
||||
[](duckdb::timestamp_t ts, int32_t mode) -> int64_t {
|
||||
int32_t y, m, day;
|
||||
duckdb::Date::Convert(duckdb::Timestamp::GetDate(ts), y, m, day);
|
||||
uint32_t year;
|
||||
uint32_t week= mc_calc_week(
|
||||
(uint32_t) y, (uint32_t) m, (uint32_t) day,
|
||||
mc_week_mode((uint32_t) mode) | MC_WEEK_YEAR, &year);
|
||||
return (int64_t) (week + year * 100);
|
||||
});
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
TO_DAYS(date) -> BIGINT
|
||||
MariaDB day number since year 0. DuckDB's builtin to_days(BIGINT)
|
||||
constructs an INTERVAL instead, and has no date/string overload.
|
||||
Relation: to_days(d) = epoch_days(d) + 719528
|
||||
(since MariaDB TO_DAYS('1970-01-01') = 719528).
|
||||
================================================================ */
|
||||
|
||||
static constexpr int64_t MC_TO_DAYS_EPOCH_OFFSET= 719528;
|
||||
|
||||
static void to_days_date_func(duckdb::DataChunk &args,
|
||||
duckdb::ExpressionState &,
|
||||
duckdb::Vector &result)
|
||||
{
|
||||
duckdb::UnaryExecutor::Execute<duckdb::date_t, int64_t>(
|
||||
args.data[0], result, args.size(),
|
||||
[](duckdb::date_t d) -> int64_t {
|
||||
return (int64_t) duckdb::Date::EpochDays(d) + MC_TO_DAYS_EPOCH_OFFSET;
|
||||
});
|
||||
}
|
||||
|
||||
static void to_days_varchar_func(duckdb::DataChunk &args,
|
||||
duckdb::ExpressionState &,
|
||||
duckdb::Vector &result)
|
||||
{
|
||||
duckdb::UnaryExecutor::Execute<duckdb::string_t, int64_t>(
|
||||
args.data[0], result, args.size(),
|
||||
[](duckdb::string_t s) -> int64_t {
|
||||
duckdb::date_t d=
|
||||
duckdb::Date::FromCString(s.GetData(), s.GetSize());
|
||||
return (int64_t) duckdb::Date::EpochDays(d) + MC_TO_DAYS_EPOCH_OFFSET;
|
||||
});
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
DAYOFWEEK(date) / WEEKDAY(date)
|
||||
DuckDB's dayofweek is 0=Sunday..6=Saturday; MariaDB DAYOFWEEK is
|
||||
1=Sunday..7=Saturday and WEEKDAY is 0=Monday..6=Sunday.
|
||||
Derived from ISO day-of-week (1=Monday..7=Sunday):
|
||||
DAYOFWEEK = (iso % 7) + 1
|
||||
WEEKDAY = iso - 1
|
||||
================================================================ */
|
||||
|
||||
static void dayofweek_date_func(duckdb::DataChunk &args,
|
||||
duckdb::ExpressionState &,
|
||||
duckdb::Vector &result)
|
||||
{
|
||||
duckdb::UnaryExecutor::Execute<duckdb::date_t, int64_t>(
|
||||
args.data[0], result, args.size(),
|
||||
[](duckdb::date_t d) -> int64_t {
|
||||
return (int64_t) (duckdb::Date::ExtractISODayOfTheWeek(d) % 7) + 1;
|
||||
});
|
||||
}
|
||||
|
||||
static void dayofweek_ts_func(duckdb::DataChunk &args,
|
||||
duckdb::ExpressionState &,
|
||||
duckdb::Vector &result)
|
||||
{
|
||||
duckdb::UnaryExecutor::Execute<duckdb::timestamp_t, int64_t>(
|
||||
args.data[0], result, args.size(),
|
||||
[](duckdb::timestamp_t ts) -> int64_t {
|
||||
duckdb::date_t d= duckdb::Timestamp::GetDate(ts);
|
||||
return (int64_t) (duckdb::Date::ExtractISODayOfTheWeek(d) % 7) + 1;
|
||||
});
|
||||
}
|
||||
|
||||
static void weekday_date_func(duckdb::DataChunk &args,
|
||||
duckdb::ExpressionState &,
|
||||
duckdb::Vector &result)
|
||||
{
|
||||
duckdb::UnaryExecutor::Execute<duckdb::date_t, int64_t>(
|
||||
args.data[0], result, args.size(),
|
||||
[](duckdb::date_t d) -> int64_t {
|
||||
return (int64_t) duckdb::Date::ExtractISODayOfTheWeek(d) - 1;
|
||||
});
|
||||
}
|
||||
|
||||
static void weekday_ts_func(duckdb::DataChunk &args,
|
||||
duckdb::ExpressionState &,
|
||||
duckdb::Vector &result)
|
||||
{
|
||||
duckdb::UnaryExecutor::Execute<duckdb::timestamp_t, int64_t>(
|
||||
args.data[0], result, args.size(),
|
||||
[](duckdb::timestamp_t ts) -> int64_t {
|
||||
duckdb::date_t d= duckdb::Timestamp::GetDate(ts);
|
||||
return (int64_t) duckdb::Date::ExtractISODayOfTheWeek(d) - 1;
|
||||
});
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
Registration
|
||||
================================================================ */
|
||||
@@ -1469,11 +1724,82 @@ void register_mysql_compat_functions(duckdb::DatabaseInstance &db)
|
||||
catalog.CreateFunction(transaction, info);
|
||||
}
|
||||
|
||||
/* week(DATE/TIMESTAMP, INTEGER) -> BIGINT (MariaDB mode arg) */
|
||||
{
|
||||
duckdb::ScalarFunctionSet set("week");
|
||||
set.AddFunction(duckdb::ScalarFunction(
|
||||
{duckdb::LogicalType::DATE, duckdb::LogicalType::INTEGER},
|
||||
duckdb::LogicalType::BIGINT, week_2arg_date_func));
|
||||
set.AddFunction(duckdb::ScalarFunction(
|
||||
{duckdb::LogicalType::TIMESTAMP, duckdb::LogicalType::INTEGER},
|
||||
duckdb::LogicalType::BIGINT, week_2arg_ts_func));
|
||||
duckdb::CreateScalarFunctionInfo info(std::move(set));
|
||||
info.on_conflict= duckdb::OnCreateConflict::ALTER_ON_CONFLICT;
|
||||
catalog.CreateFunction(transaction, info);
|
||||
}
|
||||
|
||||
/* yearweek(DATE/TIMESTAMP, INTEGER) -> BIGINT (MariaDB mode arg) */
|
||||
{
|
||||
duckdb::ScalarFunctionSet set("yearweek");
|
||||
set.AddFunction(duckdb::ScalarFunction(
|
||||
{duckdb::LogicalType::DATE, duckdb::LogicalType::INTEGER},
|
||||
duckdb::LogicalType::BIGINT, yearweek_2arg_date_func));
|
||||
set.AddFunction(duckdb::ScalarFunction(
|
||||
{duckdb::LogicalType::TIMESTAMP, duckdb::LogicalType::INTEGER},
|
||||
duckdb::LogicalType::BIGINT, yearweek_2arg_ts_func));
|
||||
duckdb::CreateScalarFunctionInfo info(std::move(set));
|
||||
info.on_conflict= duckdb::OnCreateConflict::ALTER_ON_CONFLICT;
|
||||
catalog.CreateFunction(transaction, info);
|
||||
}
|
||||
|
||||
/* to_days(DATE/VARCHAR) -> BIGINT (MariaDB day number since year 0) */
|
||||
{
|
||||
duckdb::ScalarFunctionSet set("to_days");
|
||||
set.AddFunction(duckdb::ScalarFunction(
|
||||
{duckdb::LogicalType::DATE}, duckdb::LogicalType::BIGINT,
|
||||
to_days_date_func));
|
||||
set.AddFunction(duckdb::ScalarFunction(
|
||||
{duckdb::LogicalType::VARCHAR}, duckdb::LogicalType::BIGINT,
|
||||
to_days_varchar_func));
|
||||
duckdb::CreateScalarFunctionInfo info(std::move(set));
|
||||
info.on_conflict= duckdb::OnCreateConflict::ALTER_ON_CONFLICT;
|
||||
catalog.CreateFunction(transaction, info);
|
||||
}
|
||||
|
||||
/* dayofweek(DATE/TIMESTAMP) -> BIGINT (MariaDB 1=Sunday..7=Saturday) */
|
||||
{
|
||||
duckdb::ScalarFunctionSet set("dayofweek");
|
||||
set.AddFunction(duckdb::ScalarFunction(
|
||||
{duckdb::LogicalType::DATE}, duckdb::LogicalType::BIGINT,
|
||||
dayofweek_date_func));
|
||||
set.AddFunction(duckdb::ScalarFunction(
|
||||
{duckdb::LogicalType::TIMESTAMP}, duckdb::LogicalType::BIGINT,
|
||||
dayofweek_ts_func));
|
||||
duckdb::CreateScalarFunctionInfo info(std::move(set));
|
||||
info.on_conflict= duckdb::OnCreateConflict::ALTER_ON_CONFLICT;
|
||||
catalog.CreateFunction(transaction, info);
|
||||
}
|
||||
|
||||
/* weekday(DATE/TIMESTAMP) -> BIGINT (MariaDB 0=Monday..6=Sunday) */
|
||||
{
|
||||
duckdb::ScalarFunctionSet set("weekday");
|
||||
set.AddFunction(duckdb::ScalarFunction(
|
||||
{duckdb::LogicalType::DATE}, duckdb::LogicalType::BIGINT,
|
||||
weekday_date_func));
|
||||
set.AddFunction(duckdb::ScalarFunction(
|
||||
{duckdb::LogicalType::TIMESTAMP}, duckdb::LogicalType::BIGINT,
|
||||
weekday_ts_func));
|
||||
duckdb::CreateScalarFunctionInfo info(std::move(set));
|
||||
info.on_conflict= duckdb::OnCreateConflict::ALTER_ON_CONFLICT;
|
||||
catalog.CreateFunction(transaction, info);
|
||||
}
|
||||
|
||||
sql_print_information(
|
||||
"DuckDB: registered MySQL-compatible function overloads "
|
||||
"(octet_length, length, ascii, ord, hex, oct, bin, locate, mid, "
|
||||
"rtrim, ltrim, regexp_instr, regexp_replace, regexp_substr, "
|
||||
"json_unquote, json_contains)");
|
||||
"json_unquote, json_contains, week, yearweek, to_days, dayofweek, "
|
||||
"weekday)");
|
||||
}
|
||||
|
||||
} /* namespace myduck */
|
||||
|
||||
Reference in New Issue
Block a user