只读分析引擎中支持了绝大部分 MySQL 常用函数和运算符,但是依然存在部分特殊的非常用函数和运算符尚不支持,本文为您详细列举在只读分析引擎中支持使用的函数和运算符。除文中提到的支持函数外,其他的函数均不支持。
支持的函数和运算符列表
函数类别 | 运算符列表(下表中不同运算符之间以逗号分隔) |
数学函数 | +,-,/,*,%,>=,<=,=,!=,<,>,ROUND(),ABS(),FLOOR(int),CEIL(int),CEILING(int),SQRT(),LOG(),LOG2(),LOG10(),LN(),EXP(),POW(),POWER(),SIGN(),RADIANS(),DEGREES(),CONV(),CRC32(),GREATEST(int/real),LEAST(int/real) |
逻辑函数 | AND,OR,NOT,CASE WHEN,IF(),IFNULL(),ISNULL(),IN,LIKE,ILIKE,COALESCE,IS |
位运算函数 | & (bitand),|,(bitor),~ (bitneg),^ (bitxor) |
字符串函数 | SUBSTR(),CHAR_LENGTH(),REPLACE(),CONCAT(),CONCAT_WS(),LEFT(),RIGHT(),ASCII(),LENGTH(),TRIM(),LTRIM(),RTRIM(),POSITION(),INSTR(),LOCATE(),FORMAT(),LOWER(),UCASE(),UPPER(),SUBSTRING_INDEX(),LPAD(),RPAD(),STRCMP(),QUOTE() |
正则函数和算子 | REGEXP,REGEXP_LIKE(),REGEXP_INSTR(),REGEXP_SUBSTR(),REGEXP_REPLACE(),RLIKE |
日期函数 | DATE_FORMAT(),TIMESTAMPDIFF(),FROM_UNIXTIME(),UNIX_TIMESTAMP(int),UNIX_TIMESTAMP(decimal),STR_TO_DATE(date),STR_TO_DATE(datetime),DATEDIFF(),YEAR(),MONTH(),DAY(),EXTRACT(datetime),DATE(),HOUR(),MICROSECOND(),MINUTE(),SECOND(),SYSDATE(),DATE_ADD/ADDDATE(datetime, int),DATE_ADD/ADDDATE(string, int/real),DATE_SUB/SUBDATE(datetime, int),DATE_SUB/SUBDATE(string, int/real),QUARTER(),DAYNAME(),DAYOFMONTH(),DAYOFWEEK(),DAYOFYEAR(),LAST_DAY(),MONTHNAME(),TO_SECONDS(),TO_DAYS(),FROM_DAYS(),WEEKOFYEAR(),FROMUNIXTIME(),LASTDAY() |
转换函数 | CAST(int AS DOUBLE),CAST(int AS DECIMAL),CAST(int AS STRING),CAST(int AS TIME),CAST(double AS INT),CAST(double AS DECIMAL),CAST(double AS STRING),CAST(double AS TIME),CAST(string AS INT),CAST(string AS DOUBLE),CAST(string AS DECIMAL),CAST(string AS TIME),CAST(decimal AS INT),CAST(decimal AS STRING),CAST(decimal AS TIME),CAST(decimal AS DOUBLE),CAST(time AS INT),CAST(time AS DECIMAL),CAST(time AS STRING),CAST(time AS REAL),CAST(json AS JSON),CAST(json AS STRING),CAST(int AS JSON),CAST(real AS JSON),CAST(decimal AS JSON),CAST(string AS JSON),CAST(time AS JSON),CAST(duration AS JSON) |
聚合函数 | MIN(),MAX(),SUM(),COUNT(),AVG(),GROUP_CONCAT() |
其他函数 | INET_NTOA(),INET_ATON(),INET6_NTOA(),INET6_ATON(),RAND(),ANY_VALUE() |
四则运算支持限制
目前只读分析引擎支持所有的 MySQL 四则运算逻辑,但在部份场景下仍然存在限制和不兼容,详细的特殊情况如下:
整数相除,如结果的小数位数超过 4 位,在只读分析引擎中默认会截断处理,保留小数位数的后 4 位。
Decimal 类型的除法运算,结果的小数位数会基于被除数的小数位数 +4进行截断。如 Decimal(9, 1) / Decimal(9, 1),则结果的小数位数会基于5进行截断。
Decimal 的加、减、乘、除运算。若结果的总长度超过 65,则会报错提示“out of range”。因为在 Decimal 支持的数据类型长度最大为 65。
任意数字类型与浮点数类型(float、double)进行数学运算均会存在精度误差问题,核心原因是 Double 等浮点类型本身就不是严格精度的字段类型。在 MySQL 的最佳实践中也不建议数字类型与浮点类型进行数学计算。
非数值类型的四则运算涉及到隐式转换,受限于只读分析引擎的 CAST 函数支持情况,在某些场景下,如果 CAST 不支持,相关四则运算也不支持。详细的 CAST 支持情况,请见本文上述的表格中<转换函数>的内容。