玖叶教程网

前端编程开发入门

Doris 函数(一)

函数使用帮助

在命令行终端输入 "? + 空格 + 函数名" ,可以查看对应函数使用说明;

例如 : 查看 max 函数使用方法:

条件函数

  1. if 函数
`if(boolean condition, type valueTrue, type valueFalseOrNull)`
如果表达式 condition 成立,返回结果 valueTrue;否则,返回结果 valueFalseOrNull
返回类型: valueTrue 表达式结果的类型
  1. 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。否则返回第一个参数的值。

聚合函数

  1. min,max,sum,avg,count
  2. min_by 和 max_by

函数名

语法

说明

示例

max_by

MAX_BY(expr1, expr2)

返回与 expr2 的最大值关联的 expr1 的值。

min_by

MIN_BY(expr1, expr2)

返回与 expr2 的最小值关联的 expr1 的值。

  1. 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]:拼接成字符串的分隔符,默认是 ',';
  1. 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`。

日期函数

  1. 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。

  1. 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        |
+-------------------+
  1. 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      |
        +--------------------------+
  1. 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      |
      +--------------------------+
  1. 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 |
        +---------------------------------------+
  1. 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                     |
      +--------------------------------+
  1. 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 |
    +------+-------+------+------+--------+--------+-------------+
  1. 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 |

+-----------------------------------------------------------------------------------+

  1. 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                                        |
          +--------------------------------------------+

字符串函数

  1. length,lower,upper,reverse
获取到字符串的?度,对字符串转??写和字符串的反转;
  1. 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 指的是字符?度?不是字节?度。
  1. 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 值。
  1. substr
语法:
		VARCHAR substr(VARCHAR content, INT start, INT length)
解释 :
		求子字符串,返回第一个参数描述的字符串中从start开始长度为len的部分字符串。首字母的下标为1。
  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。
  1. 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
  1. 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。
  1. replace
语法 :
		VARCHAR REPLACE (VARCHAR str, VARCHAR old, VARCHAR new)
解释 :
		将str字符串中的old子串全部替换为new串
  1. 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               |
      +------------------------+

数学函数

  1. ceil和floor
语法 : BIGINT ceil(DOUBLE x)
解释 : 返回大于或等于`x`的最小整数值.

语法 : BIGINT floor(DOUBLE x)
解释 : 返回小于或等于`x`的最大整数值.
  1. round
语法 : T round(T x[, d])
解释 : 将`x`四舍五入后保留d位小数,d默认为0。如果d为负数,则小数点左边d位为0。如果x或d为null,返回null。
  1. truncate
语法 : DOUBLE truncate(DOUBLE x, INT d)
解释 : 按照保留小数的位数`d`对`x`进行数值截取。
    规则如下:
        当`d > 0`时:保留`x`的`d`位小数
        当`d = 0`时:将`x`的小数部分去除,只保留整数部分
        当`d < 0`时:将`x`的小数部分去除,整数部分按照 `d`所指定的位数,采用数字`0`进行替换
  1. 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`的绝对值.
  1. pow
语法 : DOUBLE pow(DOUBLE a, DOUBLE b)
解释 : 返回`a`的`b`次方.
  1. 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;

  1. 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            |
    +------+-----------------+
  1. 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 |
+-------------------------------+
  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]                   |
    +------+-----------+--------------------------+
  1. array_sort
语法 : ARRAY<T> array_sort(ARRAY<T> arr)
解释 : 
		返回按升序排列后的数组,如果输入数组为NULL,则返回NULL。
		如果数组元素包含NULL, 则输出的排序数组会将NULL放在最前面。
  1. 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 |
    +------+-----------------+------------------------------+
  1. 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                     |
    +------+-----------------+--------------+--------------------------+
  1. 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                        |
+------+-----------------+--------------+-----------------------------+
  1. 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                    |
+------+-----------------+--------------+-------------------------+
  1. 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]    |
+------+------------------------------------------+---------------------------+

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言