DuckDB分析实例兼容性说明

本文介绍RDS MySQL DuckDB分析实例的兼容性。

支持的数据类型

类型

MySQL数据类型

兼容性说明

数值类型

BOOLEAN

兼容

TINYINTTINYINT UNSIGNED

兼容

SMALLINTSMALLINT UNSIGNED

兼容

INTINTEGERINT UNSIGNEDINTEGER UNSIGNED

兼容

BIGINTBIGINT UNSIGNED

兼容

FLOAT

兼容

DOUBLE

兼容

DECIMAL(m,d)

m是数值的最大精度,当m<=38时完全兼容,当m>38时,会转换为DOUBLE类型进行存储,此时会存在精度损失。

字符类型

CHARVARCHAR

仅支持UTF8系列的字符集和校对规则。

TINYTEXTTEXTMEDIUMTEXTLONGTEXT

兼容

JSON

兼容

SET

兼容

ENUM

兼容

二进制字符类型

BINARYVARBINARY

兼容

BIT

兼容

TINYBLOBBLOBMEDIUMBLOBLONGBLOB

兼容

时间类型

YEAR

兼容

TIME

DuckDB分析实例支持范围为'00:00:00'~'23:59:59',数据格式为'HH:MM:SS'

MySQL支持范围为'-838:59:59'~'838:59:59'。由于两者在取值范围上存在差异,若数据不在DuckDB分析实例支持范围内,可能导致查询结果不一致。

DATE

DuckDB分析实例支持范围为'0001-01-01'~'9999-12-31',数据格式为'YYYY-MM-DD'

MySQL支持范围为'0000-00-00'~'0001-01-01'。由于两者在取值范围上存在差异,若数据不在DuckDB分析实例支持范围内,可能导致查询结果不一致。

DATETIME

DuckDB分析实例支持范围为'0001-01-01 00:00:00.000000' UTC~'9999-12-31 00:00:00.999999' UTC,数据格式为'YYYY-MM-DD HH:MM:SS.MS'

MySQL支持范围为'0000-00-00 00:00:00'~'0001-01-01 00:00:00'。由于两者在取值范围上存在差异,若数据不在DuckDB分析实例支持范围内,可能导致查询结果不一致。

TIMESTAMP

兼容

空间数据类型

GEOMETRYPOINTLINESTRINGPOLYGONMULTIPOINTMULTILINESTRINGMULTIPOLYGONGEOMETRYCOLLECTION

不兼容

SELECT语句限制

  • 注释

    不支持#注释。例如:

    SELECT * FROM t1 #comment;
    ;
  • 字符集转换

    无论目标字符集是否支持,均不支持任何形式的字符集转换。例如:

    SELECT convert(id using gbk) FROM t1;
    SELECT cast(id AS CHAR CHARACTER SET utf8mb4) FROM t1;
  • JOIN语法

    不支持在一条SQL中同时使用显示JOIN和隐式JOIN。例如:

    SELECT * FROM t1 JOIN (t2, t3);
  • 时间间隔单位(Interval unit)

    不支持以下时间间隔单位。

    YEAR_MONTH, DAY_HOUR, HOUR_MINUTE, DAY_MINUTE, HOUR_SECOND, DAY_SECOND, SECOND_MICROSECOND, HOUR_MICROSECOND, DAY_MICROSECOND, MINUTE_SECOND, MINUTE_MICROSECOND, SQL_TSI_HOUR
  • 时间间隔表达式(Interval expr unit)

    Interval expr unit表达式中,若expr为非常量表达式,必须加括号明确表达式的范围。例如:

    # 以下SQL不支持
    SELECT '2018-12-31 23:59:59' + INTERVAL -1 SECOND; 
    # 需要改写为
    SELECT '2018-12-31 23:59:59' + INTERVAL (-1) SECOND; 
  • 别名定义

    • 不支持expr 'alias'expr "alias"的别名用法。例如:

      # 不支持
      SELECT 1 '1';
      SELECT 1 "1";
      # 可以改写为
      SELECT 1 AS '1';
      SELECT 1 AS "1";
      SELECT 1 AS `1`;
      SELECT 1 `1`;
      # 以上SQL完全等价
    • 如果别名是关键字,必须使用AS或反引号。例如:

      SELECT id time FROM t1;
      
      # 需要改写为以下任意一个
      SELECT id AS time FROM t1;
      SELECT id `time` FROM t1;
      SELECT id AS `time` FROM t1;
      SELECT id AS 'time' FROM t1;
      SELECT id AS "time" FROM t1;
  • 子查询

    不支持等值非标量子查询。例如:

    SELECT * FROM t1 WHERE (id, col1) = (SELECT id, col1 FROM t1);
  • 数据类型转换

    不支持显式转换为BINARY(num)SIGNED或 UNSIGNED 数据类型。例如:

    SELECT CAST('abc' AS binary(1));
    SELECT CAST(1 AS SIGNED);
    SELECT CAST(1 AS UNSIGNED);
  • 列修饰符

    不支持Binary修饰列名。例如:

    SELECT binary id FROM t1;
  • 复杂运算表达式

    对于复杂运算表达式,建议通过括号明确结合律以避免解析错误。

    # 符号(!=-)在DuckDB分析实例中无法正确解析
    SELECT 1 !=-1;
    # 建议改写为
    SELECT 1 != (-1);
    
    # 符号(--)在DuckDB分析实例中无法正确解析
    SELECT --1;
    # 建议改写为
    SELECT -(-1);

类型转换问题

为确保执行效率,DuckDB分析实例在执行过程中采用强类型约束机制。在查询执行时,系统会根据上下文自动进行类型转换,这种转换称为隐式类型转换。对于无法通过隐式方式完成转换的场景,您需要使用CASTCONVERT函数显式指定类型转换,以确保查询能够正确执行。

函数中支持的隐式类型转换规则

说明
  • “/”表示不涉及隐式转换,“✔️”表示支持隐式转换,“✖️”表示不支持隐式转换。

  • 常规字符串类型代指MySQL中的CHARVARCHARTINYTEXTTEXTMEDIUMTEXTLONGTEXTJSONSETENUM

  • 二进制字符串类型代指MySQL中的BINARYVARBINARYBITTINYBLOBBLOBMEDIUMBLOBLONGBLOB

  • 不支持大范围整数类型转换为小范围整数类型。

转换至基础标量类型

源类型

隐式转换至基础标量类型

字符串字面量

数值字面量

基础标量

字符串字面量

/

✖️

数值字面量

✖️

/

数值

BOOLEAN

✖️

✖️

整数类型

✖️

✖️

FLOAT

✖️

✖️

DOUBLE

✖️

✖️

DECIMAL

✖️

✖️

字符串

常规字符串

✖️

✖️

二进制字符串

✖️

✖️

日期与时间

YEAR

✖️

✖️

DATE

✖️

✖️

TIME

✖️

✖️

DATETIME

✖️

✖️

TIMESTAMP

✖️

✖️

转换至数值类型

源类型

隐式转换至数值类型

BOOLEAN

整数类型

FLOAT

DOUBLE

DECIMAL

基础标量

字符串字面量

✔️

✖️

✖️

✔️

✖️

数值字面量

✔️

✔️

✔️

✔️

✔️

数值

BOOLEAN

✖️

✖️

✖️

✖️

✖️

整数类型

✔️

/

✔️

✔️

✔️

FLOAT

✔️

✔️:仅支持转换为BIGINT

/

✔️

✖️

DOUBLE

/

✔️:仅支持转换为BIGINT

✖️

/

✖️

DECIMAL

✔️

✔️

✔️

✔️

/

字符串

常规字符串

✔️

✖️

✖️

✔️

✖️

二进制字符串

✖️

✖️

✖️

✖️

✖️

日期与时间

YEAR

✔️

✔️

✔️

✔️

✔️

DATE

✔️

✖️

✖️

✔️

✖️

TIME

✔️

✖️

✖️

✔️

✖️

DATETIME

✔️

✖️

✖️

✔️

✖️

TIMESTAMP

✔️

✖️

✖️

✔️

✖️

转换至字符串类型

源类型

隐式转换至字符串类型

常规字符串

二进制字符串

基础标量

字符串字面量

✔️

✖️

数值字面量

✖️

✖️

数值

BOOLEAN

✖️

✖️

整数类型

✔️

✖️

FLOAT

✔️

✖️

DOUBLE

✔️

✖️

DECIMAL

✔️

✖️

字符串

常规字符串

/

✖️

二进制字符串

✖️

/

日期与时间

YEAR

✔️

✖️

DATE

✔️

✖️

TIME

✔️

✖️

DATETIME

✔️

✖️

TIMESTAMP

✔️

✖️

转换至日期与时间类型

源类型

隐式转换至日期与时间类型

YEAR

DATE

TIME

DATETIME

TIMESTAMP

基础标量

字符串字面量

✖️

✖️

✖️

✖️

✖️

数值字面量

✔️

✖️

✖️

✖️

✖️

数值

BOOLEAN

✖️

✖️

✖️

✖️

✖️

整数类型

✖️

✖️

✖️

✖️

✖️

FLOAT

✖️

✖️

✖️

✖️

✖️

DOUBLE

✖️

✖️

✖️

✖️

✖️

DECIMAL

✖️

✖️

✖️

✖️

✖️

字符串

常规字符串

✖️

✖️

✖️

✖️

✖️

二进制字符串

✖️

✖️

✖️

✖️

✖️

日期与时间

YEAR

/

✖️

✖️

✖️

✖️

DATE

✖️

/

✖️

✔️

✔️

TIME

✖️

✖️

/

✔️

✔️

DATETIME

✖️

✖️

✖️

/

✔️

TIMESTAMP

✖️

✖️

✖️

✔️

/

类型比较中支持的隐式转换规则

DuckDB分析实例在类型转换和比较规则上具有更高的严格性和一致性,但在某些场景下可能与MySQL存在行为差异。具体如下:

  • 字符串到日期的隐式转换:字符串隐式转换为日期时,如果字符串格式无法正确解析为有效的日期值,SQL查询将报错并执行失败。

  • 整数类型之间的比较规则:不同整数类型之间进行比较时,DuckDB分析实例会统一向取值范围更大的整数类型进行转换。

  • 多元表达式的类型转换顺序:对于col1 in (col2, col3, col4, ...)、col1 between col2 and col3、coalesce(col1, col2, col3, ...)等多元表达式,会按照顺序进行类型转换。

  • YEAR类型的兼容性差异:在DuckDB分析实例中,YEAR类型会被转换为INTEGER类型进行比较,可能与MySQL存在不兼容。例如:

    CREATE TABLE t1 (id YEAR PRIMARY KEY);
    INSERT INTO t1 VALUES (1980);
    SELECT * FROM t1 WHERE id BETWEEN 70 AND 90;
    
    # MySQL查询结果
    +------+
    | id   |
    +------+
    | 1980 |
    +------+
    
    # DuckDB分析实例查询结果
    Empty set.
  • 布尔类型的字符串转换规则:DuckDB分析实例支持将'1'、'0'、'yes'、'no'、'true'、'false'六种字符串转换为BOOLEAN类型,其余字符串转换会报错;而MySQL会将'1'转换为true,其余字符串均转换为false。因此,如下SQL可能会存在结果不一致问题:

    CREATE TABLE t1 (id INT PRIMARY KEY);
    INSERT INTO t1 VALUES (1);
    SELECT id FROM t1 WHERE 'true';
    
    # MySQL查询结果
    Empty set
    
    # DuckDB分析实例查询结果
    +------+
    | id   |
    +------+
    |    1 |
    +------+
说明
  • 当不同类型的数据进行比较时,系统会按下表规则,将数据“转换为同一类型”后进行比较;对于不支持(✖️)的类型比较,会直接报错。

  • 常规字符串类型代指MySQL中的CHARVARCHARTINYTEXTTEXTMEDIUMTEXTLONGTEXTJSONSETENUM

  • 二进制字符串类型代指MySQL中的BINARYVARBINARYBITTINYBLOBBLOBMEDIUMBLOBLONGBLOB

与基础标量类型比较

源类型

与基础标量类型比较

字符串字面量

数值字面量

基础标量

字符串字面量

字符串

数值字面量

数值字面量

数值字面量

较大范围的数值类型

数值

BOOLEAN

BOOLEAN

较大范围的数值类型

整数类型

整数类型

较大范围的数值类型

FLOAT

FLOAT

较大范围的数值类型

DOUBLE

DOUBLE

较大范围的数值类型

DECIMAL

DECIMAL

较大范围的数值类型

字符串

常规字符串

常规字符串

数值字面量

二进制字符串

二进制字符串

✖️

日期与时间

YEAR

YEAR

较大范围的数值类型

DATE

DATETIME

✖️

TIME

TIME

✖️

DATETIME

DATETIME

✖️

TIMESTAMP

TIMESTAMP

✖️

与数值类型比较

源类型

与数值类型比较

BOOLEAN

整数类型

FLOAT

DOUBLE

DECIMAL

基础标量

字符串字面量

BOOLEAN

整数类型

FLOAT

DOUBLE

DECIMAL

数值字面量

较大范围的数值类型

较大范围的数值类型

较大范围的数值类型

较大范围的数值类型

较大范围的数值类型

数值

BOOLEAN

BOOLEAN

整数类型

FLOAT(不等式比较✖️)

DOUBLE(不等式比较✖️)

DECIMAL(不等式比较✖️)

整数类型

整数类型

整数类型

FLOAT

DOUBLE

DECIMAL

FLOAT

FLOAT(不等式比较✖️)

FLOAT

FLOAT

DOUBLE

FLOAT

DOUBLE

DOUBLE(不等式比较✖️)

DOUBLE

DOUBLE

DOUBLE

DOUBLE

DECIMAL

DECIMAL(不等式比较✖️)

DECIMAL

FLOAT

DOUBLE

DECIMAL

字符串

常规字符串

BOOLEAN

整数类型

FLOAT

DOUBLE

DECIMAL

二进制字符串

✖️

✖️

✖️

✖️

✖️

日期与时间

YEAR

INTEGER

较大范围的整数类型

FLOAT

DOUBLE

DECIMAL

DATE

✖️

✖️

✖️

DOUBLE

✖️

TIME

✖️

✖️

✖️

DOUBLE

✖️

DATETIME

✖️

✖️

✖️

DOUBLE

✖️

TIMESTAMP

✖️

✖️

✖️

DOUBLE

✖️

与字符串类型比较

源类型

与字符串类型比较

常规字符串

二进制字符串

基础标量

字符串字面量

常规字符串

二进制字符串

数值字面量

数值字面量

✖️

数值

BOOLEAN

BOOLEAN

✖️

整数类型

整数类型

✖️

FLOAT

FLOAT

✖️

DOUBLE

DOUBLE

✖️

DECIMAL

DECIMAL

✖️

字符串

常规字符串

常规字符串

二进制字符串

二进制字符串

二进制字符串

二进制字符串

日期与时间

YEAR

INTEGER

✖️

DATE

DATE

✖️

TIME

TIME

✖️

DATETIME

DATETIME

✖️

TIMESTAMP

TIMESTAMP

✖️

与日期与时间类型比较

源类型

与日期与时间类型比较

YEAR

DATE

TIME

DATETIME

TIMESTAMP

基础标量

字符串字面量

YEAR

DATETIME

TIME

DATETIME

TIMESTAMP

数值字面量

较大范围的数值类型

✖️

✖️

✖️

✖️

数值

BOOLEAN

INTEGER

✖️

✖️

✖️

✖️

整数类型

较大范围的整数类型

✖️

✖️

✖️

✖️

FLOAT

FLOAT

✖️

✖️

✖️

✖️

DOUBLE

DOUBLE

DOUBLE

DOUBLE

DOUBLE

DOUBLE

DECIMAL

DECIMAL

✖️

✖️

✖️

✖️

字符串

常规字符串

INTEGER

DATE

TIME

DATETIME

TIMESTAMP

二进制字符串

✖️

✖️

✖️

✖️

✖️

日期与时间

YEAR

INTEGER

✖️

✖️

✖️

✖️

DATE

✖️

DATE

✖️

DATETIME

TIMESTAMP

TIME

✖️

✖️

TIME

✖️

✖️

DATETIME

✖️

DATETIME

✖️

DATETIME

DATETIME

TIMESTAMP

✖️

TIMESTAMP

✖️

DATETIME

TIMESTAMP

可能出现的查询结果不一致问题

数值运算

  • 浮点数的大小比较存在不兼容。例如:

    CREATE TABLE t1 (id FLOAT PRIMARY KEY);
    INSERT INTO t1 VALUES (1.22), (1.23), (1.24);
    SELECT * FROM t1 WHERE t1.id > 1.23;
    
    # MySQL查询结果
    +------+
    | id   |
    +------+
    | 1.23 |
    | 1.24 |
    +------+
    
    # DuckDB分析实例查询结果
    +------+
    | id   |
    +------+
    | 1.24 |
    +------+
  • 浮点数的复杂复合运算结果因为浮点误差会存在不一致。

  • 当整数、DECIMAL类型之间做运算时,结果不能超过该类型的取值范围,否则可能出现结果溢出导致的执行失败。

    CREATE TABLE t1 (id TINYINT PRIMARY KEY);
    INSERT INTO t1 VALUES (100);
    SELECT id * 2 FROM t1;
    
    # MySQL查询结果
    +--------+
    | id * 2 |
    +--------+
    |    200 |
    +--------+
    
    # DuckDB分析实例查询结果
    ERROR 7577 (HY000): [DuckDB] Out of Range Error: Overflow in multiplication of INT8 (100 * 2)!.

校对规则导致的结果不一致问题

utf8mb4_0900_xx系列的校对规则在部分符号字符比较存在不兼容。例如:

CREATE TABLE t1 ( id varchar(20) COLLATE utf8mb4_0900_ai_ci PRIMARY KEY );
INSERT INTO t1 VALUES ('!'), ('_');
SELECT * FROM t1 ORDER BY id;

# MySQL查询结果
+----+
| id |
+----+
| _  |
| !  |
+----+

# DuckDB分析实例查询结果
+----+
| id |
+----+
| !  |
| _  |
+----+

IN的向量子查询对于NULL值的处理

DuckDB分析实例中,IN的向量子查询对于NULL值的处理存在不兼容问题。例如:

CREATE TABLE t1 (id INT PRIMARY KEY, col1 INT);
INSERT INTO t1 VALUES (1, 1), (2, 2);
CREATE TABLE t2 (id INT PRIMARY KEY, col1 INT);
INSERT INTO t2 VALUES (1, NULL);

select (id, col1) in (select id, col1 from t2) from t1;

# MySQL查询结果
+-----------------------------------------+
| (id, col1) in (select id, col1 from t2) |
+-----------------------------------------+
|                                    NULL |
|                                       0 |
+-----------------------------------------+

# DuckDB分析实例查询结果
+-----------------------------------------+
| (id, col1) in (select id, col1 from t2) |
+-----------------------------------------+
|                                    NULL |
|                                    NULL |
+-----------------------------------------+

对于数据(2, 2),IN后不存在向量前缀的匹配项,MySQL返回0,DuckDB分析实例返回NULL。

函数限制

聚合函数

函数名

是否支持

使用限制

AVG

BIT_AND

不支持字符串类型、DECIMAL类型、日期类型。

BIT_OR

不支持字符串类型、DECIMAL类型、日期类型。

BIT_XOR

不支持字符串类型、DECIMAL类型、日期类型。

COUNT

COUNT(DISTINCT)

GROUP_CONCAT

不支持多列GROUP_CONCAT,不支持SEPARATOR

JSON_ARRAYAGG

不涉及

JSON_OBJECTAGG

不涉及

MAX

MIN

STD

STDDEV

STDDEV_POP

STDDEV_SAMP

SUM

VAR_POP

VAR_SAMP

VARIANCE

数值函数

数值函数不支持BOOLEAN类型。

函数名

是否支持

使用限制

%

MOD

*

+

-

/

ABS()

ACOS()

ASIN()

ATAN()

不支持ATAN(y, x)

ATAN2()

不涉及

CEIL()

CEILING()

CONV()

不涉及

COS()

COT()

CRC32()

不涉及

DEGREES()

DIV

EXP()

FLOOR()

LN()

LOG()

LOG10()

LOG2()

MOD()

PI()

POW()

POWER()

RADIANS()

RAND()

ROUND()

SIGN()

SIN()

SQRT()

TAN()

TRUNCATE()

不涉及

字符串函数

DuckDB分析实例严格区分二进制字符串(BLOB、VARBINARY等)和字符串(VARCHAR、TEXT、JSON等),因此以下字符串函数只能以字符串为输入,不能以二进制字符串为输入。对于部分能以二进制字符串为输入的函数,下文将给出特别说明。

函数名

是否支持

使用限制

ASCII()

BIN()

MySQLBIN('')返回NULL,DuckDB分析实例返回'0'

BIT_LENGTH()

CHAR()

不涉及

CHAR_LENGTH()

CHARACTER_LENGTH()

CONCAT()

是:可以以二进制字符串为输入。

CONCAT_WS()

是:可以以二进制字符串为输入。

ELT()

不涉及

EXPORT_SET()

不涉及

FIELD()

不涉及

FIND_IN_SET()

该函数的第一个参数需要是字符类型,非字符类型可能会产生与MySQL不一致的结果。

FORMAT()

不涉及

HEX()

INSERT()

INSTR()

LCASE()

LEFT()

LENGTH()

是:可以以二进制字符串为输入。

LIKE

LIKE不受校对规则的影响。

LOAD_FILE()

不涉及

LOCATE()

LOWER()

LPAD()

LTRIM()

MAKE_SET()

不涉及

MATCH()

不涉及

MID()

是:可以以二进制字符串为输入。

NOT LIKE

NOT LIKE函数不受校对规则的影响。

NOT REGEXP

不涉及

OCT()

MySQLOCT('')返回NULL,DuckDB分析实例返回'0'

OCTET_LENGTH()

是:可以以二进制字符串为输入。

ORD()

POSITION()

QUOTE()

不涉及

REGEXP

不涉及

REGEXP_INSTR()

不涉及

REGEXP_LIKE()

不涉及

REGEXP_REPLACE()

不涉及

REGEXP_SUBSTR()

不涉及

REPEAT()

是:可以以二进制字符串为输入。

REPLACE()

REVERSE()

RIGHT()

RLIKE

不涉及

RPAD()

RTRIM()

SOUNDEX()

不涉及

SPACE()

STRCMP()

SUBSTR()

不支持SUBSTR(str FROM pos)SUBSTR(str FROM pos FOR len)用法。

SUBSTRING()

不支持SUBSTRING(str FROM pos)SUBSTRING(str FROM pos FOR len)用法。

SUBSTRING_INDEX()

TO_BASE64()

是:可以以二进制字符串为输入。

该函数返回值为二进制字符串类型。

TRIM()

UCASE()

UNHEX()

  • 该函数返回值为二进制字符串类型。

  • 该函数遇到非HEX digit会报错。

UPPER()

WEIGHT_STRING()

不涉及

日期函数

DuckDB分析实例中日期函数暂不接受字符串作为输入,需要先进行显式类型转换。例如:

  • 对于表中字符串类型列:

    SELECT ADDDATE(CAST(varchar_test as TIME), INTERVAL 1 DAY) FROM t1;
    SELECT ADDDATE(CAST(varchar_test as DATE), INTERVAL 1 DAY) FROM t1;
    SELECT ADDDATE(CAST(varchar_test as DATETIME), INTERVAL 1 DAY) FROM t1;
  • 对于字符串字面值常量:

    SELECT ADDDATE(TIME '12:00:00', INTERVAL 1 DAY) FROM t1;
    SELECT ADDDATE(DATE '2020-01-01', INTERVAL 1 DAY) FROM t1;
    SELECT ADDDATE(TIMESTAMP '2020-01-01 12:00:00', INTERVAL 1 DAY) FROM t1;

函数名

是否支持

使用限制

ADDDATE()

ADDDATE函数的第一个参数是TIME类型时,例如ADDDATE(TIME '12:00:00', INTERVAL 1 HOUR),ADDDATE函数会默认将TIME转换为TIMESTAMP进行运算。如果需要避免TIMETIMESTAMP做隐式转换可以使用DATE_ADD函数。

ADDTIME()

如果返回值超出DuckDB分析实例的时间类型数据的取值范围,会产生结果不一致的问题。

CONVERT_TZ()

CURRENT_DATE(),CURRENT_DATE

CURRENT_TIME(),CURRENT_TIME

CURRENT_TIMESTAMP(),CURRENT_TIMESTAMP

CURTIME()

DATE()

DATE_ADD()

DATE_ADD函数的第一个参数是TIME类型时,例如DATE_ADD(TIME '12:00:00', INTERVAL 1 HOUR)DATE_ADD函数不会进行TIMETIMESTAMP的隐式类型转换。

DATE_FORMAT()

不支持%X%V%u

DATE_SUB()

DATE_ADD()

DATEDIFF()

DAY()

DAYNAME()

DAYOFMONTH()

DAYOFWEEK()

DAYOFYEAR()

EXTRACT()

FROM_DAYS()

FROM_UNIXTIME()

GET_FORMAT()

HOUR()

LAST_DAY

LOCALTIME(),LOCALTIME

LOCALTIMESTAMP,LOCALTIMESTAMP()

MAKEDATE()

MAKETIME()

MICROSECOND()

MINUTE()

MONTH()

MONTHNAME()

NOW()

PERIOD_ADD()

年份超过9999暂不支持。

PERIOD_DIFF()

年份超过9999暂不支持。

QUARTER()

SEC_TO_TIME()

如果返回值超出DuckDB分析实例的时间类型数据的取值范围,会产生结果不一致的问题。

SECOND()

STR_TO_DATE()

  • 不支持%X%V%u

  • 如果存在format specifier没有被正确匹配,则返回NULL。

SUBDATE()

ADDDATE()

SUBTIME()

如果返回值超出DuckDB分析实例的时间类型数据的取值范围,会产生结果不一致的问题。

SYSDATE()

TIME()

TIME_FORMAT()

TIME_TO_SEC()

不支持DAY TIME格式的输入,例如:select time_to_sec('1 12:00:00');

TIMEDIFF()

TIMESTAMP()

不涉及

TIMESTAMPADD()

TIMESTAMPDIFF()

TO_DAYS()

TO_SECONDS()

UNIX_TIMESTAMP()

UTC_DATE()

UTC_TIME()

UTC_TIMESTAMP()

WEEK()

WEEKDAY()

WEEKOFYEAR()

YEAR()

YEARWEEK()

JSON函数

函数名

是否支持

使用限制

JSON_ARRAY()

JSON_ARRAY_APPEND()

不涉及

JSON_ARRAY_INSERT()

不涉及

JSON_CONTAINS()

不涉及

JSON_CONTAINS_PATH()

不涉及

JSON_DEPTH()

JSON_EXTRACT()

JSON_INSERT()

不涉及

JSON_KEYS()

JSON_LENGTH()

JSON_MERGE()

不涉及

JSON_MERGE_PATCH()

仅支持两个JSON进行合并,合并后JSON的字段顺序可能与MySQL中不同。

JSON_MERGE_PRESERVE()

不涉及

JSON_OBJECT()

JSON_OVERLAPS()

JSON_PRETTY()

JSON_QUOTE()

JSON_REMOVE()

不涉及

JSON_REPLACE()

不涉及

JSON_SCHEMA_VALID()

不涉及

JSON_SCHEMA_VALIDATION_REPORT()

不涉及

JSON_SEARCH()

不涉及

JSON_SET()

不涉及

JSON_STORAGE_FREE()

不涉及

JSON_STORAGE_SIZE()

不涉及

JSON_TABLE()

不涉及

JSON_TYPE()

不涉及

JSON_UNQUOTE()

不涉及

JSON_VALID()

JSON_VALUE()

不涉及

MEMBER OF()

不涉及

其他限制

DuckDB分析实例不支持视图查询(View)。