FlinkSql常用函数

时间:2022-10-08 18:16:57

1、比较函数

    = <> >  >= <  <=  
注意:select null=null; 返回为null
IS NULL 、 IS NOT NULL
--非空判断
value1 IS DISTINCT FROM value2、value1 IS NOT DISTINCT FROM value2、
--不同于
value1 BETWEEN [ ASYMMETRIC | S OR 、AND、NOT boolean、boolean IS FALSE、boolean IS NOT FALSE、boolean IS TRUE、boolean IS NOT TRUE、boolean IS UNKNOWN、boolean IS NOT UNKNOWN
--select null=null IS UNKNOWN; 返回trueYMMETRIC ] value2 AND value3、value1 NOT BETWEEN [ ASYMMETRIC | SYMMETRIC ] value2 AND value3、
--如:select 1 between 0 and 2; 返回true。默认ASYMMETRIC 表示value1在闭区间内 [value2,value3]
string1 LIKE string2 、string1 NOT LIKE string2
--如:select 'abc' like 'a%'; 返回true,用 '用%或_模糊数据'
string1 SIMILAR TO string2 、string1 NOT SIMILAR TO string2
--string2 为正则表达式. 但测试失败 select 'fgh34444' SIMILAR TO '[a-z][0-9]*'; 返回的false
value1 IN (value2 [, value3]* )、value1 NOT IN (value2 [, value3]* )、
-- select 'abc' in ('abc','e','f'); 返回true,要求类型必须一致(都为字符串,或都为)。select 1 in (1,2,3,4);
EXISTS (sub-query)、
--select EXISTS (select 1); 返回true(自查询至少返回一行时)
value IN (sub-query)、value NOT IN (sub-query)
--select 1 in (select 1); 值等于子查询返回的行(只限于一个值),返回true. select 'abc' in (select 'abc');
OR 、AND、NOT boolean、boolean IS FALSE、boolean IS NOT FALSE、boolean IS TRUE、boolean IS NOT TRUE、boolean IS UNKNOWN、boolean IS NOT UNKNOWN
--select null=null IS UNKNOWN; 返回true

2、逻辑函数

    OR 、AND、NOT boolean、boolean IS FALSE、boolean IS NOT FALSE、boolean IS TRUE、boolean IS NOT TRUE、boolean IS UNKNOWN、boolean IS NOT UNKNOWN
--select null=null IS UNKNOWN; 返回true

3、算术函数

    + numeric、- numeric --返回对应的正负数字
+ - * /
% 、MOD(numeric1, numeric2)
-- select MOD(3,2); 3除以2的余数=1.仅当numeric1为负时结果为负
POWER(numeric1, numeric2)
--select POWER(2,3); 返回2 的 3次幂=8.0
ABS(numeric)
--select ABS(-1); 返回绝对值1
CEIL(numeric) --向上取整 select CEIL(2.3); 返回3.000000
FLOOR(numeric) --向下取整 select FLOOR(2.3); 返回2.000000
ROUND(numeric, integer) 取整
--select ROUND(2.3,1); 保留1位小数2.30000。
--select ROUND(2.3,0); 保留0位小数 2.0000
TRUNCATE(numeric1, integer2)
--select TRUNCATE(2.3,1);保留1位小数2.30000 select TRUNCATE(2.3,0) 保留0位小数 2.0000
RAND() --介于 0.0(含)和 1.0(不含)之间的伪随机双精度值
RAND(integer) --介于 0.0(含)和 1.0(不含)之间的伪随机双精度值。两个 RAND 函数具有相同的初始种子,它们将返回相同的数字序列。
RAND_INTEGER(integer) --介于 0(含)和整数(不含)之间的伪随机整数值
--使用初始种子返回 0(含)和指定值(不含)之间的伪随机整数值
UUID() --返回 UUID(通用唯一标识符)字符串(例如,“3d3c68f7-f608-473f-b60c-b0c44ad4cc4e”)。UUID 是使用加密强的伪随机数生成器生成的。
BIN(integer) --以二进制格式返回整数的字符串表示形式。如果整数为 NULL,则返回NULL。例如,BIN(4)返回“100”并BIN(12)返回“1100”
HEX(numeric 或 string) --以十六进制格式返回整数数值或字符串的字符串表示形式

4、字符串函数


string1 || string2 --拼接
--select 'abc' || 'def'; 返回abcdef
CHAR_LENGTH(string) --字符个数
--select CHAR_LENGTH('abcdef'); 返回 6
UPPER(string) --转大写
--select UPPER('aBc'); 返回 ABC
LOWER(string) --转小写
--select LOWER('aBc'); 返回abc
POSITION(string1 IN string2) --字串位置
--select POSITION('ab' in 'cdabcds'); 返回3
TRIM([ BOTH | LEADING | TRAILING ] string1 FROM string2) --默认从两边去除第一个
--select TRIM(' abc ' from ' abcdefabc '); 返回def 。select TRIM(' abc '); 返回abc 两边的空格都被删除
LTRIM(string) --去除左边的空格
RTRIM(string) --去除右边的空格
REPEAT(string, integer) --重复字符串整数次
--select REPEAT('ab',3); 返回 ababab
REGEXP_REPLACE(string1, string2, string3) --将string1中符合正则表达式的 替换为 string3
--select REGEXP_REPLACE('foobar', 'oo|ar', ''); 返回 fb
OVERLAY(string1 PLACING string2 FROM integer1 [ FOR integer2 ]) --将指定位置的字符串替换
--select OVERLAY('This is an old string' PLACING ' new' FROM 10 FOR 5); 返回 This is a new string --不含FROM 10
SUBSTRING(string FROM integer1 [ FOR integer2 ]) --从指定位置截取指定长度的字串
--select SUBSTRING('This is an old string'FROM 10 FOR 5); 返回 n old --含FROM 10
REPLACE(string1, string2, string3) --替换
--select REPLACE('ababab', 'abab', 'z'); 用z替换abab 返回zab
REGEXP_EXTRACT(string1, string2[, integer]) --
--select REGEXP_EXTRACT('foothebar', 'foo(.*?)(bar)', 2); 返回 bar --正则表达式匹配组索引从 1 开始,0 表示匹配整个正则表达式
INITCAP(string) --第一个字符转换为大写,其余字符转换为小写
--select INITCAP('aBc'); 返回 Abc
CONCAT(string1, string2,...) --拼接,如果任何参数为 NULL,则返回 NULL。

CONCAT_WS(string1, string2, string3,...) --拼接,第一个字符拼接符不为null则不为null
--select CONCAT_WS('~', 'AA', NULL, 'BB', '', 'CC');会报错 Illegal use of 'NULL' --但官网说会跳过null
--select CONCAT_WS('~', 'AA', 'BB', '', 'CC'); 返回“AA~BB~~CC”
LPAD(string1, integer, string2) --从string1左边填充string2到整数字符的长度。如果string1的长度小于integer,则返回string1缩短为整数字符
--LPAD('hi',4,'??')返回“??hi”;LPAD('hi',1,'??')返回“h”。
RPAD(string1, integer, string2) --从右边填充
--RPAD('hi',4,'??')返回“hi??”,RPAD('hi',1,'??')返回“h”
FROM_BASE64(string) --从string返回 base64 解码的结果;如果字符串为 NULL,则返回NULL。
--FROM_BASE64('aGVsbG8gd29ybGQ=')返回“hello world”。
TO_BASE64(string) --从string返回 base64 编码的结果;如果字符串为 NULL,则返回NULL。
--TO_BASE64('hello world')返回“aGVsbG8gd29ybGQ=”。
ASCII(string) -- 返回string的第一个字符的数值
--ascii('abc')返回 97 (a的ascii码),并ascii(CAST(NULL AS VARCHAR))返回 NULL。
CHR(integer) --返回二进制等效于integer的 ASCII 字符.如果整数大于 255,我们将先得到整数除以 255的模数,并返回模数的CHR。如果整数为 NULL,则返回NULL。
--chr(97)返回a,chr(353)返回a
DECODE(binary, string) ---使用提供的字符集('US-ASCII''ISO-8859-1''UTF-8''UTF-16BE''UTF-16LE''UTF- 16')
--报错
ENCODE(string1, string2); --使用指定
--select ENCODE('a', 'UTF-8'); --报错
INSTR(string1, string2) --返回string2在string1 中第一次出现的位置
--select INSTR('bcab','a'); 返回3
LEFT(string, integer) --从左边截取
--select LEFT('
abc2awe',2); 返回ab
RIGHT(string, integer) --从右边截取
--select RIGHT('abcawe',3); 返回awe 从右边截取3个
LOCATE(string1, string2[, integer]) --返回string2中string1在位置integer之后第一次出现的位置。如果未找到,则返回 0
--select LOCATE('abcdefabc','a',3); 返回0 --不符合预期
PARSE_URL(string1, string2[, string3])
--select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'HOST'); 返回 facebook.com
REGEXP(string1, string2) --如果string1 的任何(可能为空)子字符串与 Java 正则表达式string2匹配,则返回 TRUE
REVERSE(string) --反转
--select REVERSE('abc'); 返回cba
SPLIT_INDEX(string1, string2, integer1) --用分割符分割后取第n个字串(从0开始)
--select SPLIT_INDEX('abc|def|ghi','|',2); 返回ghi
STR_TO_MAP(string1[, string2, string3]]) --使用分隔符将string1拆分为键/值对后返回一个映射。string2是对分隔符,默认为 ','。而string3是键值分隔符,默认为 '='
--select STR_TO_MAP('a=1,b=2,c=3'); 返回 {a=1, b=2, c=3}
--select STR_TO_MAP('a:1|b:2|c:3','|',':'); 返回 的结果不符合预期 {=, a=null, 1=null, b=nu~
SUBSTR(string[, integer1[, integer2]]) --返回字符串的子字符串,从位置 integer1 开始,长度为 integer2(默认到末尾)。
--select substr('abc',1,2); 返回ab

5、时间函数(时间搓单位都是秒)

            timeintervalunit时间单位:SECOND,MINUTE,HOUR,DAY,WEEK,MONTH,QUARTER,或YEAR。
select REPLACE('hello world', 'world', 'flink') returns "hello flink"; REPLACE('ababab', 'abab', 'z') returns "zab".
select CONCAT('AA', 'BB', 'CC') returns "AABBCC";
DATE_FORMAT(timestamp, string) 此功能存在严重错误,暂时不要使用。
INTERVAL string range 使用报错
--select INTERVAL '10 00:00:00.004' DAY TO SECOND;
--select INTERVAL '1' HOUR;
--select INTERVAL '1' MINUTE;
CURRENT_DATE UTC 时区 系统日期
--select CURRENT_DATE; 返回 2021-10-08
CURRENT_TIME UTC 时区 系统时间
--select CURRENT_TIME; 返回 09:25:28.137
CURRENT_TIMESTAMP UTC 时区 系统时间搓,TIMESTAMP 类型
--select CURRENT_TIMESTAMP; 返回 2021-10-08T09:23:15.180 --数据不对,和时区有关系
LOCALTIMESTAMP 本地时区系统时间, TIMESTAMP 类型
--select LOCALTIMESTAMP; 返回 2021-10-08T17:19:47.787 --时间对
LOCALTIME 系统时间字符串(HH:mm:ss)
--select LOCALTIME; 返回 17:22:16.212
EXTRACT(timeintervalunit FROM temporal) 取日期中的年/月/日 返回整数
--select EXTRACT(DAY FROM DATE '2006-06-05'); 返回 日 为 5
--select EXTRACT(MONTH FROM DATE '2006-06-05'); 返回 月 为 6
--select EXTRACT(YEAR FROM DATE '2006-06-05'); 返回 年 为 2006
YEAR(date) 年份
--select YEAR(TO_DATE('2021-10-08 08:45:17')); 返回2021
QUARTER(date) 几季度
--select QUARTER(TO_DATE('2021-10-08 08:45:17')); 返回4
MONTH(date) 几月
--select MONTH(TO_DATE('2021-10-08 08:45:17')); 返回 10
WEEK(date) 几周
--select WEEK(TO_DATE('2021-10-08 08:45:17')); 返回 40
DAYOFYEAR(date) 一年中的第几天
--select DAYOFYEAR(TO_DATE('2021-10-08 08:45:17')); 返回281
DAYOFMONTH(date) 一月中的第几天
--select DAYOFMONTH(TO_DATE('2021-10-08 08:45:17')); 返回8
--select DAYOFMONTH(TO_DATE(FROM_UNIXTIME(1631061917))); -- 结果:8
--select DAYOFMONTH(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))); --参数为DATE类型 当前时间为月份中的多少号 14
DAYOFWEEK(date) 一周中的第几天
--select DAYOFWEEK(TO_DATE('2021-10-08 08:45:17')); 返回6,实际是5
HOUR(timestamp) 返回小时数
--select HOUR(TIMESTAMP '2021-09-08 08:45:17'); 返回 8
MINUTE(timestamp) 返回分钟数
--select MINUTE(TIMESTAMP '2021-09-08 08:45:17'); 返回 45
SECOND(timestamp) 返回秒数
--select SECOND(TIMESTAMP '2021-09-08 08:45:17'); 返回 17
FLOOR(timepoint TO timeintervalunit) 向下取整分钟
--select FLOOR(TIME '12:44:31' TO MINUTE); 返回 12:44
CEIL(timepoint TO timeintervalunit) 向上取整分钟,回合时间点到时间单元timeintervalunit。
-- select CEIL(TIME '12:44:31' TO MINUTE); 返回 12:45
(timepoint1, temporal1) OVERLAPS (timepoint2, temporal2) 由 ( timepoint1 , temporal1 ) 和 ( timepoint2 , temporal2 )定义的两个时间间隔重叠,则返回 TRUE
--select (TIME '2:55:00', INTERVAL '1' HOUR) OVERLAPS (TIME '3:30:00', INTERVAL '2' HOUR); 返回true
--select (TIME '9:00:00', TIME '10:00:00') OVERLAPS (TIME '10:15:00', INTERVAL '3' HOUR); 返回false
DATE string 日期字符串(yyyy-MM-dd)转为 DATE 类型
--select Date '2021-09-08'; 返回 2021-09-08
TIME string 时间字符串转(HH:mm:ss)为 TIME 类型
--select TIME '08:45:17'; 返回 08:45:17

TO_DATE(string1[, string2]) 将日期时间字符串(yyyy-MM-dd HH:mm:ss)转为 DATE 类型
--select TO_DATE(FROM_UNIXTIME(1631061917)) 结果为 2021-09-08 ,因 TO_DATE 是转为日
--select TO_DATE('2021-09-08 08:45:17'); 返回 2021-09-08
TO_TIMESTAMP(string1[, string2]) 将时间字符串转为 TIMESTAMP 类型
--select TO_TIMESTAMP('2021-09-08 08:45:17','yyyy-MM-dd HH:mm:ss'); 返回 2021-09-08T08:45:17 到秒
--select TO_TIMESTAMP('2021-09-08 08:45','yyyy-MM-dd HH:mm'); 返回 2021-09-08T08:45 到分钟
TIMESTAMP string 将时间字符串(“yyyy-MM-dd HH:mm:ss[.SSS]”的形式)转为 TIMESTAMP 类型
--select TIMESTAMP '2021-09-08 08:45:17'; 返回 2021-09-08T08:45:17
NOW() 系统时间,返回 TIMESTAMP 类型
--select NOW(); 返回 2021-10-08T08:50:01.486
UNIX_TIMESTAMP() 系统时间搓,返回整数
--select UNIX_TIMESTAMP(); 返回 1633680986
UNIX_TIMESTAMP(string1[, string2]) 返回整数,时间字符串(默认情况下:yyyy-MM-dd HH:mm:ss 如果未指定)转换为 Unix 时间戳(以秒为单位)。
--select UNIX_TIMESTAMP('2021-09-08 08:45:17','yyyy-MM-dd HH:mm:ss'); 返回 1631061917
FROM_UNIXTIME(numeric[, string]) 将整数转为时间 字符串(默认为 'yyyy-MM-dd HH:mm:ss') 类型
--select FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyy-MM-dd HH:mm'); 返回 2021-10-08 16:28 到分钟
--select FROM_UNIXTIME(1631061917); 返回 2021-09-08 08:45:17
--select FROM_UNIXTIME(UNIX_TIMESTAMP()); 返回当前日期 2021-10-08 16:18:32
--select FROM_UNIXTIME(1631061917) >TIMESTAMPADD(MINUTE, -5, NOW()); --结果: false
TIMESTAMPDIFF(timepointunit, timepoint1, timepoint2) 时间搓差。
--select TIMESTAMPDIFF(MINUTE,TIMESTAMP FROM_UNIXTIME(place_time/1000), UNIX_TIMESTAMP())<5 --近5分钟
--select TIMESTAMPDIFF(MINUTE, TIMESTAMP '2003-01-03 10:10:00', TIMESTAMP '2003-01-03 10:00:00'); --结果为-10 后面-前面的 分钟差.
TIMESTAMPADD(timeintervalunit, interval, timepoint) 向前/后推时间。timeintervalunit时间单位:SECOND,MINUTE,HOUR,DAY,WEEK,MONTH,QUARTER,或YEAR。
--select TIMESTAMPADD(MINUTE, -5, NOW()) ; --当前时间往前推5分钟: 2021-10-08T08:33:48.108 ,但可能因时区原因有显示的时间有差异
--select TIMESTAMPADD(SECOND, -5, TO_DATE(FROM_UNIXTIME(1631061917))); --按 天取整后 往前推5秒结果:2021-09-07T23:59:55 .往前推5秒钟 16310619172021-09-08 08:45:17

CONVERT_TZ(string1, string2, string3) 将日期时间格式字符串 从时区string2转换为时区string3
--select CONVERT_TZ('1970-01-01 00:00:00', 'UTC', 'America/Los_Angeles'); 返回 1969-12-31 16:00:00

6、条件函数


CASE value WHEN value1_1 THEN result1 ELSE resultZ END 满足某一个值
--select CASE 'a' WHEN 'a' THEN 1 ELSE 0 END; 返回 1
--select CASE 'b' WHEN 'a' THEN 1 ELSE 0 END; 返回 0
CASE WHEN condition1 THEN result1 ELSE resultZ END 满足某一个条件时
--select CASE WHEN 10>5 THEN 1 ELSE 0 END; 返回 1
--select CASE WHEN 4>5 THEN 1 ELSE 0 END; 返回 0
NULLIF(value1, value2) 等值判断:如果value1等于value2则返回 NULL ;否则返回value1。
--NULLIF(5, 5)返回NULL;NULLIF(5, 0)返回 5
COALESCE(value1, value2 [, value3 ]* ) 返回第一个不为 NULL 的值
--select COALESCE(NULL, 5,3); 返回5
IF(condition, true_value, false_value)
--select IF(10>5,1,0); 返回 1
IS_ALPHA(string) 字符串中的所有字符都是字母,则返回真,否则返回假。
--select IS_ALPHA('abc'); 返回true
--select IS_ALPHA('abc1'); 返回false
IS_DECIMAL(string) 如果string可以解析为有效数字,则返回 true ,否则返回 false
--select IS_DECIMAL('123'); 返回true
--select IS_DECIMAL('abc1'); 返回false
IS_DIGIT(string) 如果字符串中的所有字符都是数字,则返回真,否则返回假。
--select IS_DIGIT('123'); 返回true
--select IS_DIGIT('abc1'); 返回false

7、类型强转函数

    CAST(value AS type) 强转
--select CAST('42' AS INT); 返回 42
--select CAST(NULL AS VARCHAR); 返回 VARCHAR 类型的 NULL。

8、集合函数

    array [ value1,value2... ] 构建 数组 
数组名[n] 取数组的第n个元素。索引从 1 开始
--select arr[2] from (select array [1,4,5] arr)t; 返回 4
--select array ['a','b','c']; 返回 [a, b, c]
map [key1,value1,key2,value2] 构建map集合
集合名[key值] 取key对应的value
--select mp[2] from (select map [1,'a',2,'b'] mp)t; 返回 b
--select map [1,'a',2,'b']; 返回 {1=a, 2=b}
CARDINALITY(map) 返回map 中的条目数 。
--select CARDINALITY(map [1,'a',2,'b']); 返回 2
CARDINALITY(array) 返回array 中的元素个数。
select CARDINALITY(array [1,2,3,0,0]); 返回5
ELEMENT(array) 返回数组的唯一元素(其基数应为 1);如果数组为空,则返回 NULL 。如果数组有多个元素,则抛出异常。
--select ELEMENT(array [1,2,3,0,0]) ; --执行失败
--select ELEMENT(array [2]) ; 返回2

9、值访问函数

    tableName.compositeType.field  按名称从 Flink 复合类型(例如,Tuple、POJO)返回字段的值。
tableName.compositeType.* 返回 Flink 复合类型(例如,Tuple、POJO)的平面表示,将其每个直接子类型转换为单独的字段。在大多数情况下,平面表示的字段与原始字段的命名类似,但使用美元分隔符(例如,mypojo$mytuple$f0)。

10、分组功能

    GROUP_ID() 返回唯一标识分组键组合的整数。
GROUPING(expression1 [, expression2]* )
GROUPING_ID(expression1 [, expression2]* )
返回给定分组表达式的位向量。

11、哈希函数

    MD5(string) 以 32 个十六进制数字的字符串形式返回string的 MD5 哈希值;如果字符串为 NULL,则返回NULL。
SHA1(string) 以 40 个十六进制数字的字符串形式返回string的 SHA-1 哈希值;如果字符串为 NULL,则返回NULL。
SHA224(string) 以 56 个十六进制数字的字符串形式返回string的 SHA-224 哈希值;如果字符串为 NULL,则返回NULL。
SHA256(string) 以 64 个十六进制数字的字符串形式返回string的 SHA-256 哈希值;如果字符串为 NULL,则返回NULL。
SHA384(string) 以 96 个十六进制数字的字符串形式返回string的 SHA-384 哈希值;如果字符串为 NULL,则返回NULL。
SHA512(string) 以 128 个十六进制数字的字符串形式返回string的 SHA-512 哈希值;如果字符串为 NULL,则返回NULL。
SHA2(string, hashLength) 使用 SHA-2 系列散列函数(SHA-224、SHA-256、SHA-384 或 SHA-512)返回散列。第一个参数字符串是要散列的字符串,第二个参数hashLength是结果的位长(224、256、384或 512)。如果string或hashLength为 NULL,则返回NULL

12、聚合函数

    COUNT([ ALL ] expression | DISTINCT expression1 [, expression2]*) 默认情况下或使用 ALL,返回表达式不为 NULL的输入行数。对每个值的一个唯一实例使用 DISTINCT。
COUNT(*) COUNT(1) 返回输入行数。
AVG([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的平均值(算术平均值)。对每个值的一个唯一实例使用 DISTINCT。
SUM([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行的表达式总和。对每个值的一个唯一实例使用 DISTINCT。
MAX([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的最大值。对每个值的一个唯一实例使用 DISTINCT。
MIN([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的最小值。对每个值的一个唯一实例使用 DISTINCT。
STDDEV_POP([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的总体标准偏差。对每个值的一个唯一实例使用 DISTINCT。
STDDEV_SAMP([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的样本标准偏差。对每个值的一个唯一实例使用 DISTINCT。
VAR_POP([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的总体方差(总体标准差的平方)。对每个值的一个唯一实例使用 DISTINCT。
VAR_SAMP([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的样本方差(样本标准差的平方)。对每个值的一个唯一实例使用 DISTINCT。
COLLECT([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回跨所有输入行的多组表达式。NULL 值将被忽略。对每个值的一个唯一实例使用 DISTINCT。
VARIANCE([ ALL | DISTINCT ] expression) VAR_SAMP() 的同义词。仅在眨眼规划器中受支持。
RANK() 返回值在一组值中的排名。结果是 1 加上分区顺序中当前行之前或等于当前行的行数。这些值将在序列中产生间隙。仅在眨眼规划器中受支持。
DENSE_RANK() 返回值在一组值中的排名。结果是一加先前分配的等级值。与函数 rank 不同,dense_rank 不会在排名序列中产生间隙。仅在眨眼规划器中受支持。
ROW_NUMBER() 根据窗口分区内行的顺序,为每一行分配一个唯一的序列号,从一开始。
ROW_NUMBER 和 RANK 相似。ROW_NUMBER 按顺序对所有行进行编号(例如 1、2、3、4、5)。RANK 为平局提供相同的数值(例如 1、2、2、4、5)。仅在眨眼规划器中受支持。
LEAD(expression [, offset] [, default] ) 返回窗口中当前行之前偏移第 th 行处的expression值。的默认值的偏移是1和默认值默认为NULL。仅在眨眼规划器中受支持。
LAG(expression [, offset] [, default]) 返回窗口中当前行后偏移第 th 行处的expression值。的默认值的偏移是1和默认值默认为NULL。 仅在眨眼规划器中受支持。
FIRST_VALUE(expression) 返回一组有序值中的第一个值。 仅在眨眼规划器中受支持。
LAST_VALUE(expression) 返回一组有序值中的最后一个值。仅在眨眼规划器中受支持。
LISTAGG(expression [, separator]) 连接字符串表达式的值并在它们之间放置分隔符值。字符串末尾不添加分隔符。分隔符的默认值为“,”。仅在眨眼规划器中受支持。