函数使用帮助
在命令行终端输入 "? + 空格 + 函数名" ,可以查看对应函数使用说明;
例如 : 查看 max 函数使用方法:
条件函数
- if 函数
`if(boolean condition, type valueTrue, type valueFalseOrNull)`
如果表达式 condition 成立,返回结果 valueTrue;否则,返回结果 valueFalseOrNull
返回类型: valueTrue 表达式结果的类型
- null 处理函数
函数名 | 语法 | 说明 | 示例 |
ifnull | ifnull(expr1, expr2) | 如果 expr1 的值不为 NULL 则返回 expr1,否则返回 expr2 | |
nvl | nvl(expr1, expr2) | 如果 expr1 的值不为 NULL 则返回 expr1,否则返回 expr2 | |
coalesce | coalesce(expr1, expr2, ...., expr_n)) | 返回参数中的第一个非空表达式(从左向右) | |
nullif | nullif(expr1, expr2) | 如果两个参数相等,则返回NULL。否则返回第一个参数的值。 |
聚合函数
- min,max,sum,avg,count
- min_by 和 max_by
函数名 | 语法 | 说明 | 示例 |
max_by | MAX_BY(expr1, expr2) | 返回与 expr2 的最大值关联的 expr1 的值。 | |
min_by | MIN_BY(expr1, expr2) | 返回与 expr2 的最小值关联的 expr1 的值。 |
- group_concat
语法 :
VARCHAR GROUP_CONCAT([DISTINCT] VARCHAR str[, VARCHAR sep] [ORDER BY { col_name | expr} [ASC | DESC]])
解释 :
1. 该函数是类似于 sum() 的聚合函数,group_concat 将结果集中的多行结果连接成一个字符串。第二个参数 sep 为字符串之间的连接符号,该参数可以省略。该函数通常需要和 group by 语句一起使用。
2. 支持Order By进行多行结果的排序,排序和聚合列可不同。
3. group_concat对于收集的字段只能是string,varchar,char类型;
4. 当不指定分隔符的时候,默认使? ',';
5. VARCHAR :代表GROUP_CONCAT函数返回值类型;
6. [DISTINCT]:可选参数,针对需要拼接的列的值进?去重;
7. [, VARCHAR sep]:拼接成字符串的分隔符,默认是 ',';
- collect_list 和 collect_set
函数名 | 语法 | 说明 | 示例 |
collect_set | ARRAY<T> collect_set(expr[,max_size]) | 返回一个对`expr`去重后的数组。可选参数`max_size`,通过设置该参数能够将结果数组的大小限制为 `max_size` 个元素。 得到的结果数组中不包含NULL元素,数组中的元素顺序不固定。该函数具有别名`group_uniq_array`。 | |
collect_list | ARRAY<T> collect_list(expr[,max_size]) | 返回一个包含 expr 中所有元素(不包括NULL)的数组,可选参数`max_size`,通过设置该参数能够将结果数组的大小限制为 `max_size` 个元素。 得到的结果数组中不包含NULL元素,数组中的元素顺序不固定。该函数具有别名`group_array`。 |
日期函数
- curdate,current_date,curtime,current_time,current_timestamp,now
函数名 | 语法 | 说明 | 示例 |
curdate/current_date | DATE CURDATE() | 获取当前的日期,以DATE类型返回 | |
curtime/current_time | 获得当前的时间,以TIME类型返回 | ||
now | DATETIME NOW() | 获得当前的时间,以Datetime类型返回; 注意: 1. 当前只有DatetimeV2数据类型可支持秒精度 2. 受限于JDK实现,如果用户使用JDK8构建FE,则精度最多支持到毫秒(小数点后三位),更大的精度位将全部填充0。如果用户有更高精度需求,请使用JDK11。 | |
current_timestamp | DATETIME CURRENT_TIMESTAMP() | 获得当前的时间,以Datetime类型返回; 注意: 1. 当前只有DatetimeV2数据类型可支持秒精度 2. 受限于JDK实现,如果用户使用JDK8构建FE,则精度最多支持到毫秒(小数点后三位),更大的精度位将全部填充0。如果用户有更高精度需求,请使用JDK11。 |
- last_day
语法 :
DATE last_day(DATETIME date)
解释 :
返回输入日期中月份的最后一天;所以返回的日期中,年和月不变,日可能是如下情况:
'28'(非闰年的二月份),
'29'(闰年的二月份),
'30'(四月,六月,九月,十一月),
'31'(一月,三月,五月,七月,八月,十月,十二月)
示例 :
mysql > select last_day('2000-02-03');
+-------------------+
| last_day('2000-02-03 00:00:00') |
+-------------------+
| 2000-02-29 |
+-------------------+
- from_unixtime
语法 :
DATETIME FROM_UNIXTIME(BIGINT unix_timestamp[, VARCHAR string_format])
解释 :
将 unix 时间戳转化为对应的 time 格式,返回的格式由 `string_format` 指定;
支持 `date_format` 中的 format 格式,默认为 %Y-%m-%d %H:%i:%s;
传入的是整型,返回的是字符串类型;
其余 `string_format` 格式是非法的,返回 NULL;
目前支持的 `unix_timestamp` 范围为 `[0, 32536771199]`,超出范围的 `unix_timestamp` 将会得到 NULL;
注意 :
doris-2.0.3 版本传入的整形会隐式转换成 int 类型,不是bigint 类型;
日期格式 :
yyyyMMdd
yyyy-MM-dd
yyyy-MM-dd HH:mm:ss
示例 :
mysql> select from_unixtime(1196440219);
+---------------------------+
| from_unixtime(1196440219) |
+---------------------------+
| 2007-12-01 00:30:19 |
+---------------------------+
mysql> select from_unixtime(1196440219, 'yyyy-MM-dd HH:mm:ss');
+--------------------------------------------------+
| from_unixtime(1196440219, 'yyyy-MM-dd HH:mm:ss') |
+--------------------------------------------------+
| 2007-12-01 00:30:19 |
+--------------------------------------------------+
mysql> select from_unixtime(1196440219, '%Y-%m-%d');
+-----------------------------------------+
| from_unixtime(1196440219, '%Y-%m-%d') |
+-----------------------------------------+
| 2007-12-01 |
+-----------------------------------------+
mysql> select from_unixtime(1196440219, '%Y-%m-%d %H:%i:%s');
+--------------------------------------------------+
| from_unixtime(1196440219, '%Y-%m-%d %H:%i:%s') |
+--------------------------------------------------+
| 2007-12-01 00:30:19 |
+--------------------------------------------------+
```
对于超过范围的时间戳,可以采用from_second函数
`DATETIME FROM_SECOND(BIGINT unix_timestamp)`
```
mysql> select from_second(21474836470);
+--------------------------+
| from_second(21474836470) |
+--------------------------+
| 2650-07-06 16:21:10 |
+--------------------------+
- from_second
语法 :
-- 秒
`DATETIME FROM_SECOND(BIGINT unix_timestamp)`
-- 毫秒
`DATETIME FROM_MILLISECOND(BIGINT unix_timestamp)`
-- 微妙
`DATETIME FROM_MICROSECOND(BIGINT unix_timestamp)`
解释 :
将时间戳转化为对应的 DATETIME
传入的是整型,返回的是DATETIME类型
示例 :
mysql> select from_microsecond(0);
+----------------------------+
| from_microsecond(0) |
+----------------------------+
| 1970-01-01 08:00:00.000000 |
+----------------------------+
mysql> select from_microsecond(12345678);
+----------------------------+
| from_microsecond(12345678) |
+----------------------------+
| 1970-01-01 08:00:12.345678 |
+----------------------------+
mysql> select from_millisecond(0);
+-------------------------+
| from_millisecond(0) |
+-------------------------+
| 1970-01-01 08:00:00.000 |
+-------------------------+
mysql> select from_millisecond(12345678);
+----------------------------+
| from_millisecond(12345678) |
+----------------------------+
| 1970-01-01 11:25:45.678 |
+----------------------------+
mysql> select from_second(21474836470);
+--------------------------+
| from_second(21474836470) |
+--------------------------+
| 2650-07-06 16:21:10 |
+--------------------------+
- unix_timestamp
语法 :
INT UNIX_TIMESTAMP([DATETIME date[, STRING fmt]])
解释 :
将 Date 或者 Datetime 类型转化为 unix 时间戳。
如果没有参数,则是将当前的时间转化为时间戳。
参数需要是 Date 或者 Datetime 类型。
对于在 1970-01-01 00:00:00 之前或 2038-01-19 03:14:07 之后的时间,该函数将返回 0。
Format 的格式请参阅 `date_format` 函数的格式说明。
该函数受时区影响。
示例 :
mysql> select unix_timestamp();
+------------------+
| unix_timestamp() |
+------------------+
| 1558589570 |
+------------------+
mysql> select unix_timestamp('2007-11-30 10:30:19');
+---------------------------------------+
| unix_timestamp('2007-11-30 10:30:19') |
+---------------------------------------+
| 1196389819 |
+---------------------------------------+
mysql> select unix_timestamp('2007-11-30 10:30-19', '%Y-%m-%d %H:%i-%s');
+---------------------------------------+
| unix_timestamp('2007-11-30 10:30-19') |
+---------------------------------------+
| 1196389819 |
+---------------------------------------+
mysql> select unix_timestamp('2007-11-30 10:30%3A19', '%Y-%m-%d %H:%i%%3A%s');
+---------------------------------------+
| unix_timestamp('2007-11-30 10:30%3A19') |
+---------------------------------------+
| 1196389819 |
+---------------------------------------+
mysql> select unix_timestamp('1969-01-01 00:00:00');
+---------------------------------------+
| unix_timestamp('1969-01-01 00:00:00') |
+---------------------------------------+
| 0 |
+---------------------------------------+
- to_date
语法 :
`DATE TO_DATE(DATETIME)`
解释 ;
返回 DATETIME 类型中的日期部分。
示例 :
mysql> select to_date("2020-02-02 00:00:00");
+--------------------------------+
| to_date('2020-02-02 00:00:00') |
+--------------------------------+
| 2020-02-02 |
+--------------------------------+
- extract
语法 :
`INT extract(unit FROM DATETIME)`
解释 :
提取DATETIME某个指定单位的值。单位可以为year, month, day, hour, minute, second 或者 microsecond
示例 :
mysql> select extract(year from '2022-09-22 17:01:30') as year,
-> extract(month from '2022-09-22 17:01:30') as month,
-> extract(day from '2022-09-22 17:01:30') as day,
-> extract(hour from '2022-09-22 17:01:30') as hour,
-> extract(minute from '2022-09-22 17:01:30') as minute,
-> extract(second from '2022-09-22 17:01:30') as second,
-> extract(microsecond from cast('2022-09-22 17:01:30.000123' as datetimev2(6))) as microsecond;
+------+-------+------+------+--------+--------+-------------+
| year | month | day | hour | minute | second | microsecond |
+------+-------+------+------+--------+--------+-------------+
| 2022 | 9 | 22 | 17 | 1 | 30 | 123 |
+------+-------+------+------+--------+--------+-------------+
- date_add,date_sub,datediff
函数名 | 语法 | 说明 | 示例 |
date_add | `INT DATE_ADD(DATETIME date, INTERVAL expr type)` | 向日期添加指定的时间间隔。 date 参数是合法的日期表达式。 expr 参数是您希望添加的时间间隔。 type 参数可以是下列值:YEAR, MONTH, DAY, HOUR, MINUTE, SECOND | mysql> select date_add('2010-11-30 23:59:59', INTERVAL 2 DAY); +-------------------------------------------------+ | date_add('2010-11-30 23:59:59', INTERVAL 2 DAY) | +-------------------------------------------------+ | 2010-12-02 23:59:59 | +-------------------------------------------------+ |
date_sub | `DATETIME DATE_SUB(DATETIME date, INTERVAL expr type)` | 从日期减去指定的时间间隔 date 参数是合法的日期表达式。 expr 参数是您希望添加的时间间隔。 type 参数可以是下列值:YEAR, MONTH, DAY, HOUR, MINUTE, SECOND | mysql> select date_sub('2010-11-30 23:59:59', INTERVAL 2 DAY); +-------------------------------------------------+ | date_sub('2010-11-30 23:59:59', INTERVAL 2 DAY) | +-------------------------------------------------+ | 2010-11-28 23:59:59 | +-------------------------------------------------+ |
datediff | `INT DATEDIFF(DATETIME expr1, DATETIME expr2)` | 计算expr1 - expr2,结果精确到天。 expr1 和 expr2 参数是合法的日期或日期/时间表达式。 注释:只有值的日期部分参与计算。 | mysql> select datediff(CAST('2007-12-31 23:59:59' AS DATETIME), CAST('2007-12-30' AS DATETIME)); +-----------------------------------------------------------------------------------+ | datediff(CAST('2007-12-31 23:59:59' AS DATETIME), CAST('2007-12-30' AS DATETIME)) | +-----------------------------------------------------------------------------------+ | 1 | +-----------------------------------------------------------------------------------+ mysql> select datediff(CAST('2010-11-30 23:59:59' AS DATETIME), CAST('2010-12-31' AS DATETIME)); +-----------------------------------------------------------------------------------+ | datediff(CAST('2010-11-30 23:59:59' AS DATETIME), CAST('2010-12-31' AS DATETIME)) | +-----------------------------------------------------------------------------------+ | -31 | +-----------------------------------------------------------------------------------+ |
- date_format
语法 :
`VARCHAR DATE_FORMAT(DATETIME date, VARCHAR format)`
解释 :
将日期类型按照format的类型转化为字符串,
当前支持最大128字节的字符串,如果返回值长度超过128字节,则返回NULL。
date 参数是合法的日期。format 规定日期/时间的输出格式。
可以使用的格式有:
%a | 缩写星期名
%b | 缩写月名
%c | 月,数值
%D | 带有英文前缀的月中的天
%d | 月的天,数值(00-31)
%e | 月的天,数值(0-31)
%f | 微秒
%H | 小时 (00-23)
%h | 小时 (01-12)
%I | 小时 (01-12)
%i | 分钟,数值(00-59)
%j | 年的天 (001-366)
%k | 小时 (0-23)
%l | 小时 (1-12)
%M | 月名
%m | 月,数值(00-12)
%p | AM 或 PM
%r | 时间,12-小时(hh:mm:ss AM 或 PM)
%S | 秒(00-59)
%s | 秒(00-59)
%T | 时间, 24-小时 (hh:mm:ss)
%U | 周 (00-53) 星期日是一周的第一天
%u | 周 (00-53) 星期一是一周的第一天
%V | 周 (01-53) 星期日是一周的第一天,与 %X 使用
%v | 周 (01-53) 星期一是一周的第一天,与 %x 使用
%W | 星期名
%w | 周的天 (0=星期日, 6=星期六)
%X | 年,其中的星期日是周的第一天,4 位,与 %V 使用
%x | 年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y | 年,4 位
%y | 年,2 位
%% | 用于表示 %
还可以使用三种特殊格式:
yyyyMMdd
yyyy-MM-dd
yyyy-MM-dd HH:mm:ss
示例 :
mysql> select date_format('2009-10-04 22:23:00', '%W %M %Y');
+------------------------------------------------+
| date_format('2009-10-04 22:23:00', '%W %M %Y') |
+------------------------------------------------+
| Sunday October 2009 |
+------------------------------------------------+
mysql> select date_format('2007-10-04 22:23:00', '%H:%i:%s');
+------------------------------------------------+
| date_format('2007-10-04 22:23:00', '%H:%i:%s') |
+------------------------------------------------+
| 22:23:00 |
+------------------------------------------------+
mysql> select date_format('1900-10-04 22:23:00', '%D %y %a %d %m %b %j');
+------------------------------------------------------------+
| date_format('1900-10-04 22:23:00', '%D %y %a %d %m %b %j') |
+------------------------------------------------------------+
| 4th 00 Thu 04 10 Oct 277 |
+------------------------------------------------------------+
mysql> select date_format('1997-10-04 22:23:00', '%H %k %I %r %T %S %w');
+------------------------------------------------------------+
| date_format('1997-10-04 22:23:00', '%H %k %I %r %T %S %w') |
+------------------------------------------------------------+
| 22 22 10 10:23:00 PM 22:23:00 00 6 |
+------------------------------------------------------------+
mysql> select date_format('1999-01-01 00:00:00', '%X %V');
+---------------------------------------------+
| date_format('1999-01-01 00:00:00', '%X %V') |
+---------------------------------------------+
| 1998 52 |
+---------------------------------------------+
mysql> select date_format('2006-06-01', '%d');
+------------------------------------------+
| date_format('2006-06-01 00:00:00', '%d') |
+------------------------------------------+
| 01 |
+------------------------------------------+
mysql> select date_format('2006-06-01', '%%%d');
+--------------------------------------------+
| date_format('2006-06-01 00:00:00', '%%%d') |
+--------------------------------------------+
| %01 |
+--------------------------------------------+
字符串函数
- length,lower,upper,reverse
获取到字符串的?度,对字符串转??写和字符串的反转;
- lpad,rpad
向左/右边补?
语法 :
VARCHAR rpad(VARCHAR str, INT len, VARCHAR pad)
VARCHAR lpad(VARCHAR str, INT len, VARCHAR pad)
解释 :
-- 返回 str 中?度为 len(从?字?开始算起)的字符串。
--如果 len ?于 str 的?度,则在 str 的后?不断补充 pad 字符,
--直到该字符串的?度达到 len 为?。如果 len ?于 str 的?度,
--该函数相当于截断 str 字符串,只返回?度为 len 的字符串。
--len 指的是字符?度?不是字节?度。
- concat,concat_ws
concat :
语法 :
VARCHAR concat(VARCHAR,...)
解释 :
将多个字符串连接起来, 如果参数中任意一个值是 NULL,那么返回的结果就是 NULL;
concat_ws :
语法 :
VARCHAR concat_ws(VARCHAR sep, VARCHAR str,...)
VARCHAR concat_ws(VARCHAR sep, ARRAY array)
解释 :
使用第一个参数 sep 作为连接符,将第二个参数以及后续所有参数(或ARRAY中的所有字符串)拼接成一个字符串。
如果分隔符是 NULL,返回 NULL。
`concat_ws`函数不会跳过空字符串,会跳过 NULL 值。
- substr
语法:
VARCHAR substr(VARCHAR content, INT start, INT length)
解释 :
求子字符串,返回第一个参数描述的字符串中从start开始长度为len的部分字符串。首字母的下标为1。
- ends_with,starts_with
ends_with :
语法 :
BOOLEAN ENDS_WITH(VARCHAR str, VARCHAR suffix)
解释 :
如果字符串以指定后缀结尾,返回true。否则,返回false。任意参数为NULL,返回NULL。
starts_with :
语法 :
BOOLEAN ENDS_WITH(VARCHAR str, VARCHAR suffix)
解释 :
如果字符串以指定后缀结尾,返回true。否则,返回false。任意参数为NULL,返回NULL。
- trim,ltrim,rtrim
trim :
语法 :
VARCHAR trim(VARCHAR str[, VARCHAR rhs])
解释 :
当没有rhs参数时,将参数 str 中右侧和左侧开始部分连续出现的空格去掉,否则去掉rhs;
ltrim:
语法 :
VARCHAR ltrim(VARCHAR str[, VARCHAR rhs])
解释 :
当没有rhs参数时,将参数 str 中从左侧部分开始部分连续出现的空格去掉,否则去掉rhs
rtrim :
语法 :
VARCHAR rtrim(VARCHAR str[, VARCHAR rhs])
解释 :
当没有rhs参数时,将参数 str 中从右侧部分开始部分连续出现的空格去掉,否则去掉rhs
- null_or_empty,not_null_or_empty
null_or_empty :
语法 :
BOOLEAN NULL_OR_EMPTY (VARCHAR str)
解释 :
如果字符串为空字符串或者NULL,返回true。否则,返回false。
not_null_or_empty :
语法 :
BOOLEAN NOT_NULL_OR_EMPTY (VARCHAR str)
解释 :
如果字符串为空字符串或者NULL,返回false。否则,返回true。
- replace
语法 :
VARCHAR REPLACE (VARCHAR str, VARCHAR old, VARCHAR new)
解释 :
将str字符串中的old子串全部替换为new串
- split_part
语法 :
VARCHAR split_part(VARCHAR content, VARCHAR delimiter, INT field)
解释 :
根据分割符拆分字符串, 返回指定的分割部分(从一或负一开始计数)。field字段支持负数,代表从右往左倒着截取并取数。
`delimiter` 和 `field` 参数需要是常量, 不支持变量。
10.money_format
语法 :
VARCHAR money_format(Number)
解释 :
将数字按照货币格式输出,整数部分每隔3位用逗号分隔,小数部分保留2位
示例 :
mysql> select money_format(1123.456);
+------------------------+
| money_format(1123.456) |
+------------------------+
| 1,123.46 |
+------------------------+
数学函数
- ceil和floor
语法 : BIGINT ceil(DOUBLE x)
解释 : 返回大于或等于`x`的最小整数值.
语法 : BIGINT floor(DOUBLE x)
解释 : 返回小于或等于`x`的最大整数值.
- round
语法 : T round(T x[, d])
解释 : 将`x`四舍五入后保留d位小数,d默认为0。如果d为负数,则小数点左边d位为0。如果x或d为null,返回null。
- truncate
语法 : DOUBLE truncate(DOUBLE x, INT d)
解释 : 按照保留小数的位数`d`对`x`进行数值截取。
规则如下:
当`d > 0`时:保留`x`的`d`位小数
当`d = 0`时:将`x`的小数部分去除,只保留整数部分
当`d < 0`时:将`x`的小数部分去除,整数部分按照 `d`所指定的位数,采用数字`0`进行替换
- abs
语法 :
SMALLINT abs(TINYINT x)
INT abs(SMALLINT x)
BIGINT abs(INT x)
LARGEINT abs(BIGINT x)
LARGEINT abs(LARGEINT x)
DOUBLE abs(DOUBLE x)
FLOAT abs(FLOAT x)
DECIMAL abs(DECIMAL x)
解释 : 返回`x`的绝对值.
- pow
语法 : DOUBLE pow(DOUBLE a, DOUBLE b)
解释 : 返回`a`的`b`次方.
- greatest 和 least
语法 : greatest(col_a, col_b, …, col_n)
解释 : 比较`n`个`column`的大小返回其中的最大值.若`column`中有`NULL`,则返回`NULL`.
语法 : least(col_a, col_b, …, col_n)
解释 : 比较`n`个`column`的大小返回其中的最小值.若`column`中有`NULL`,则返回`NULL`.
数组函数
Only supported in vectorized engine
仅?持向量化引擎中使? : mysql> set enable_vectorized_engine=true;
- array()
语法 : ARRAY<T>
解释 :
由T类型元素组成的数组,不能作为key列使用。目前支持在Duplicate模型的表中使用。
2.0 版本之后支持在Unique模型的表中非key列使用。
T支持的类型有:
BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, FLOAT, DOUBLE, DECIMAL, DATE,
DATEV2, DATETIME, DATETIMEV2, CHAR, VARCHAR, STRING
示例 :
mysql> CREATE TABLE `array_test` (
`id` int(11) NULL COMMENT "",
`c_array` ARRAY<int(11)> NULL COMMENT ""
) ENGINE=OLAP
DUPLICATE KEY(`id`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`id`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"in_memory" = "false",
"storage_format" = "V2"
);
mysql> INSERT INTO `array_test` VALUES (1, [1,2,3,4,5]);
mysql> INSERT INTO `array_test` VALUES (2, [6,7,8]), (3, []), (4, null);
mysql> SELECT * FROM `array_test`;
+------+-----------------+
| id | c_array |
+------+-----------------+
| 1 | [1, 2, 3, 4, 5] |
| 2 | [6, 7, 8] |
| 3 | [] |
| 4 | NULL |
+------+-----------------+
- array_min,array_max,array_avg,array_sum,array_size
1 求数组中的最?值,最?值,平均值,数组中所有元素的和,数组的?度
2 数组中的NULL值会被跳过。空数组以及元素全为NULL值的数组,结果返回NULL值。
示例 :
MySQL [test]> select array_min([-1,null, 1]);
+-------------------------------+
| array_min(ARRAY(-1, NULL, 1)) |
+-------------------------------+
| -1 |
+-------------------------------+
- array_remove
语法 :
ARRAY<T> array_remove(ARRAY<T> arr, T val)
解释 :
返回移除所有的指定元素后的数组,如果输入参数为NULL,则返回NULL
示例 :
mysql> select k1, k2, array_remove(k2, k1) from array_type_table_nullable;
+------+-----------+--------------------------+
| k1 | k2 | array_remove(`k2`, `k1`) |
+------+-----------+--------------------------+
| NULL | [1, 2, 3] | NULL |
| 1 | NULL | NULL |
| NULL | [NULL, 1] | NULL |
| 1 | [NULL, 1] | [NULL] |
+------+-----------+--------------------------+
- array_sort
语法 : ARRAY<T> array_sort(ARRAY<T> arr)
解释 :
返回按升序排列后的数组,如果输入数组为NULL,则返回NULL。
如果数组元素包含NULL, 则输出的排序数组会将NULL放在最前面。
- array_contains
语法 : BOOLEAN array_contains(ARRAY<T> arr, T value)
解释 :
判断数组中是否包含value。返回结果如下:
1 - value在数组arr中存在;
0 - value不存在数组arr中;
NULL - arr为NULL时。
示例 :
mysql> SELECT id,c_array,array_contains(c_array, 5) FROM `array_test`;
+------+-----------------+------------------------------+
| id | c_array | array_contains(`c_array`, 5) |
+------+-----------------+------------------------------+
| 1 | [1, 2, 3, 4, 5] | 1 |
| 2 | [6, 7, 8] | 0 |
| 3 | [] | 0 |
| 4 | NULL | NULL |
+------+-----------------+------------------------------+
- array_except
语法 : ARRAY<T> array_except(ARRAY<T> array1, ARRAY<T> array2)
解释 :
返回一个数组,包含所有在array1内但不在array2内的元素,不包含重复项,如果输入参数为NULL,则返回NULL;
类似于取差集,将返回的差集结果数组去重;
示例 :
mysql> select k1,k2,k3,array_except(k2,k3) from array_type_table_nullable;
+------+-----------------+--------------+--------------------------+
| k1 | k2 | k3 | array_except(`k2`, `k3`) |
+------+-----------------+--------------+--------------------------+
| 1 | [1, NULL, 3] | [1, 3, 5] | [NULL] |
| 2 | [NULL, NULL, 2] | [2, NULL, 4] | [] |
| 3 | NULL | [1, 2, 3] | NULL |
+------+-----------------+--------------+--------------------------+
- array_intersect
语法 : ARRAY<T> array_intersect(ARRAY<T> array1, ARRAY<T> array2)
解释 : 返回一个数组,包含array1和array2的交集中的所有元素,不包含重复项,如果输入参数为NULL,则返回NULL;
两个数组取交集后。将返回的结果去重;
示例 :
mysql> select k1,k2,k3,array_intersect(k2,k3) from array_type_table_nullable;
+------+-----------------+--------------+-----------------------------+
| k1 | k2 | k3 | array_intersect(`k2`, `k3`) |
+------+-----------------+--------------+-----------------------------+
| 1 | [1, NULL, 3] | [1, 3, 5] | [1, 3] |
| 2 | [NULL, NULL, 2] | [2, NULL, 4] | [NULL, 2] |
| 3 | NULL | [1, 2, 3] | NULL |
+------+-----------------+--------------+-----------------------------+
- array_union
语法 : ARRAY<T> array_union(ARRAY<T> array1, ARRAY<T> array2)
解释 : 返回一个数组,包含array1和array2的并集中的所有元素,不包含重复项,如果输入参数为NULL,则返回NULL;
取两个数组的并集,将返回的结果去重;
示例 :
mysql> select k1,k2,k3,array_union(k2,k3) from array_type_table_nullable;
+------+-----------------+--------------+-------------------------+
| k1 | k2 | k3 | array_union(`k2`, `k3`) |
+------+-----------------+--------------+-------------------------+
| 1 | [1, NULL, 3] | [1, 3, 5] | [1, NULL, 3, 5] |
| 2 | [NULL, NULL, 2] | [2, NULL, 4] | [NULL, 2, 4] |
| 3 | NULL | [1, 2, 3] | NULL |
+------+-----------------+--------------+-------------------------+
- array_distinct
语法 : ARRAY<T> array_distinct(ARRAY<T> arr)
解释 : 返回去除了重复元素的数组,如果输入数组为NULL,则返回NULL。
示例 :
mysql> select k1, k2, array_distinct(k2) from array_test01;
+------+------------------------------------------+---------------------------+
| k1 | k2 | array_distinct(`k2`) |
+------+------------------------------------------+---------------------------+
| 1 | ['a', 'b', 'c', 'd', 'e'] | ['a', 'b', 'c', 'd', 'e'] |
| 2 | ['f', 'g', 'h'] | ['f', 'g', 'h'] |
| 3 | [''] | [''] |
| 3 | [NULL] | [NULL] |
| 5 | ['a', 'b', 'c', 'd', 'e', 'a', 'b', 'c'] | ['a', 'b', 'c', 'd', 'e'] |
| 6 | NULL | NULL |
| 7 | ['a', 'b', NULL] | ['a', 'b', NULL] |
| 8 | ['a', 'b', NULL, NULL] | ['a', 'b', NULL] |
+------+------------------------------------------+---------------------------+