0


Flink -- 内置函数(ALL)

1.比较函数

比较函数的函数名和功能描述如下:

函数名

功能描述

函数名

功能描述
value1 = value2

  • 比较 value1 和 value2 是否相等,如果相等则返回 TRUE,如果不相等则返回 FALSE。

  • NULL 与任何值比较的结果均为 NULL,在 WHERE 条件中会被当作 FALSE。因此请使用 IS NULL 而不是 = NULL 来与 NULL 进行比较。

  • = 和 IS NOT DISTINCT FROM 的区别主要在于对 NULL 值的处理的方式不同。
    value1 <> value2比较 value1 和 value2 是否不相等。如果不相等则返回 TRUE,否则返回 FALSE。value1 > value2比较 value1 是否大于 value2。如果大于返回 TRUE,否则返回 FALSE。value1 >= value2比较 value1 是否大于等于 value2。如果大于等于则返回 TRUE,否则返回 FALSE。value1 < value2比较 value1 是否小于 value2。如果小于则返回 TRUE,否则返回 FALSE。value1 <= value2比较 value1 是否小于等于 value2。如果小于等于则返回 TRUE,否则返回 FALSE。value IS NULL如果 value 为 NULL 则返回 TRUE,否则返回 FALSE。value IS NOT NULL如果 value 不为 NULL 则返回 TRUE,否则返回 FALSE。value1 IS DISTINCT FROM value2如果两个值不等(所有 NULL 值视为彼此相等),则返回 TRUE,否则返回 FALSE。value1 IS NOT DISTINCT FROM value2如果两个值相等(所有 NULL 值视为彼此相等),则返回 TRUE,否则返回 FALSE。value1 BETWEEN [ASYMMETRICSYMMETRIC ] value2 AND value3value1 NOT BETWEEN value2 AND value3如果 value1 小于 value2 或者大于 value3,则返回 TRUE,否则返回 FALSE。string1 LIKE string2如果 string1 符合 string2 表示的 pattern 则返回 TRUE,否则返回 FALSE。string1 NOT LIKE string2如果 string1 不符合 string2 表示的 pattern 则返回 TRUE,否则返回 FALSE。string1 SIMILAR TO string2如果 string1 符合 string2 表示的正则表达式,则返回 TRUE,否则返回 FALSE。string1 NOT SIMILAR TO string2如果 string1 不符合 string2 表示的正则表达式,则返回 TRUE,否则返回 FALSE。value IN (listItem [, listItem]* )

  • 如果 value 处于 IN 后面的值列表中,则返回 TRUE。该语句等价于多个 OR 表达式的连接。

  • 如果值列表中包含 NULL,则找不到时会返回 NULL,否则找不到时返回 FALSE。

  • 如果 value 是 NULL,则结果永远为 NULL。
    value NOT IN (listItem, [, listItem]*)如果 value 不在 IN 后的值列表中,则返回 TRUE,否则返回 FALSE。EXISTS (某个子查询)

  • 如果子查询返回至少一行,则返回 TRUE,否则返回 FALSE。

  • 该查询对内存压力较大,请谨慎使用。
    value IN (某个子查询)

  • 如果子查询返回的多行结果中,有一条等于 value 的值,则返回 TRUE,否则返回 FALSE。

  • 该查询对内存压力较大,请谨慎使用。
    value NOT IN (某个子查询)

  • 如果子查询返回的多个结果中,没有一条等于 value,则返回 TRUE,否则返回 FALSE。

  • 该查询对内存压力较大,请谨慎使用。

2.逻辑函数

逻辑函数用来执行逻辑运算,结果是布尔值(Boolean)。

逻辑状态有 TRUE、FALSE、UNKNOWN 三种(NULL 值的逻辑状态是 UNKNOWN),因而 NOT TRUE 不一定是 FALSE,还可能是 UNKNOWN。

函数名

功能描述
boolean1 OR boolean2如果 boolean1 或者 boolean2 任意一个为 TRUE,则返回 TRUE,否则返回 FALSE。boolean1 AND boolean2当且仅当 boolean1 和 boolean2 均为 TRUE 时才返回 TRUE,否则返回 FALSE。NOT boolean如果 boolean 为 TRUE 则返回 FALSE;如果为 FALSE 则返回 TRUE;如果为 UNKNOWN 则返回 UNKNOWN。boolean IS FALSE如果 boolean 为 FALSE 则返回 TRUE;如果 boolean 为 TRUE或UNKNOWN 则返回 FALSE。boolean IS NOT FALSE如果 boolean 不为 FALSE 则返回 TRUE;如果为 TRUE或UNKNOWN 则返回 TRUE。boolean IS TRUE如果 boolean 为 TRUE 则返回 TRUE;如果 boolean 为 FALSE或UNKNOWN 则返回 FALSE。boolean IS NOT TRUE如果 boolean 不为 TRUE 则返回 TRUE;如果为 TRUE 则返回 FALSE。boolean IS UNKNOWN如果 boolean 为 UNKNOWN 则返回 TRUE,否则返回 FALSE。boolean IS NOT UNKNOWN如果 boolean 不为 UNKNOWN 则返回 TRUE,否则返回 FALSE。

3.算术函数

算术函数的函数名和功能描述如下:

函数名

功能描述

函数名

功能描述
+numeric返回 numeric 本身。-numeric返回 0-numeric 的值,即反转符号。numeric1 + numeric2计算 numeric1 加 numeric2 的结果。numeric1 - numeric2计算 numeric1 减 numeric2 的结果。numeric1 * numeric2计算 numeric1 乘 numeric2 的结果。numeric1 / numeric2计算 numeric1 除以 numeric2 的结果。POWER(numeric1, numeric2)计算 numeric1 的 numeric2 次方。ABS(numeric)返回 numeric 的绝对值。MOD(numeric1, numeric2)返回 numeric1 除以 numeric2 的余数。如果 numeric1 是负数,那么余数也为负数。SQRT(numeric)计算 numeric 的平方根。LN(numeric)计算 numeric 的自然对数(以 e 为底)。LOG10(numeric)计算 numeric 以10为底的对数。LOG2(numeric)计算 numeric 以2为底的对数。LOG(numeric2)
LOG(numeric1, numeric2)如果提供一个参数,计算 numeric2 的自然对数(等价于 LN)。
如果提供两个参数,计算 numeric2 以 numeric1 为底的对数。EXP(numeric)计算 e 的 numeric 次方。CEIL(numeric)
CEILING(numeric)返回 numeric 向上取整的值。FLOOR(numeric)返回 numeric 向下取整的值。TRUNCATE(numeric1, numeric2)对 numeric1 的小数部分以截断的方式取整,取整的位数由 numeric2 决定。

  • 如果参数为 NULL,则结果也是 NULL。
  • 如果 numeric2 为0或不填,则结果没有小数部分。numeric2 可为负数,此时对整数部分取整。 例如 TRUNCATE(42.345, 2) 返回42.34;TRUNCATE(42.345) 返回42.0;TRUNCATE(42.345, -1) 返回40.0。
    SIN(numeric)计算 numeric 的正弦值。SINH(numeric)计算 numeric 的双曲正弦值(返回值为 DOUBLE 类型)。COS(numeric)计算 numeric 的余弦值。COSH(numeric)计算 numeric 的双曲余弦值(返回值为 DOUBLE 类型)。TAN(numeric)计算 numeric 的正切值。TANH(numeric)计算 numeric 的双曲正切值(返回值为 DOUBLE 类型)。COT(numeric)计算 numeric 的余切值。ASIN(numeric)计算 numeric 的反正弦值。ACOS(numeric)计算 numeric 的反余弦值。ATAN(numeric)计算 numeric 的反正切值。ATAN2(numeric1, numeric2)计算 (numeric1、numeric2) 坐标点的四象限反正切值。DEGREES(numeric)将 numeric 从弧度转为角度。RADIANS(numeric)将 numeric 从角度转为弧度。SIGN(numeric)得到 numeric 的符号,负数是-1,0返回0,正数是1。ROUND(numeric, int)对 numeric 取整,位数由 int 值给定,可正也可负。PI()返回一个可以代表 π 的值。E()返回一个可以代表自然对数的底数 e 的值。RAND()
    RAND(种子值)返回一个0.0 - 1.0(不包含)的伪随机数,可以指定一个整数作为种子值。RAND_INTEGER(上限值)
    RAND_INTEGER(种子值, 上限值)返回一个0.0 - 指定上限值(不包含)的伪随机数。UUID()返回一个随机生成的 Type-4 UUID 字符串。LOG(numeric)
    LOG(base, numeric)返回 numeric 的自然对数,或者返回以指定 base 为底的对数。BIN(numeric)获取 numeric 的二进制表示的字符串,例如输入4,则返回"100"。HEX(numeric)
    HEX(string)获取 numeric 或 string 的十六进制表示的字符串,例如输入15或"15" 则返回"F"。

    4.字符串函数

函数

函数名

功能描述
string1 || string2连接两个字符串,返回两个字符串拼接后的结果,等同于 CONCAT(string1, string2)。CHAR_LENGTH(string)返回字符串的长度。CHARACTER_LENGTH(string)与 CHAR_LENGTH(string) 相同。UPPER(string)返回 string 的全大写字母形式。LOWER(string)返回 string 的全小写字母形式。POSITION(string1 IN string2)获取 string1 在 string2 中第一次出现的位置(位置从1开始计数)。当 string1 在 string2 中找不到时,返回0。TRIM({BOTH |LEADING |TRAILING }string1 FROM string2 )从 string2 中除去字符串首尾/首位/末尾的 string1。默认情况下,首尾的空格都被删除。LTRIM(string)去掉 string 字符串最左边的所有空格。例如 LTRIM(' Hello') 会返回 'Hello'。RTRIM(string)去掉 string 字符串最右边的所有空格。例如 RTRIM(' World ') 会返回 ' World'。REPEAT(string, integer)将 string 字符串重复 integer 次。例如 REPEAT('Meow', 3) 会返回 'MeowMeowMeow'。REGEXP_REPLACE(string1, string2, string3)对 string1 字符串以 string2 表示的正则表达式进行替换,替换内容是 string3。例如 REGEXP_REPLACE('banana', 'a|n', 'A') 返回 'bAAAAA'。REPLACE(string1, string2, string3)将 string1 字符串中所有的 string2 替换为 string3。例如 REPLACE('banana', 'a', 'A') 返回 'bAnAnA'。OVERLAY(string1 PLACING string2 FROM start_pos [ FOR length ])将 string1 从第 start_pos 位(start_pos 从1开始计数)开始的子串替换为 string2。可以指定替换的长度。SUBSTRING(string from pos [ FOR length])获取从 pos 位开始的子串,默认行为是直到源字符串的最后,可以使用 FOR 来指定子串的长度。其中字符串起始 pos 从1开始计数,而不是0。REGEXP_EXTRACT(string1, string2[, integer])从 string1 中提取正则分组,正则表达式为 string2,第一个括号为第一组,以此类推。可通过第三个参数 integer 来指定所需的分组号(从1开始)。如果不指定分组号或者分组号为0,则表示返回整个正则表达式匹配到的字符串。例如,

REGEXP_EXTRACT('foothebar', 'foo(.*?)(bar)', 2)

返回 'bar'。INITCAP(string)将 string 中的单词,转为以大写字母开头,其他是小写字母(首字母大写)的形式。例如 INITCAP('i have a dream') 返回 'I Have A Dream'。CONCAT(string1, string2 …)连接多个字符串。若任意字符串为 NULL,则结果为 NULL。CONCAT_WS(separator, string1, string2, …)使用指定的分隔符 separator 连接多个字符串。如果 separator 为 NULL,则结果为 NULL。如果某个字符串为 NULL,则跳过它;但是不会跳过空字符串。例如

CONCAT_WS('~', 'AA','BB', '', 'CC')

会返回

AA~BB~~CC

。LPAD(text, length, padding)使用 padding 指定的字符串从左侧填充 text 字符串到指定长度 length。如果 text 比 length 更长,则会截断到 length 的长度。RPAD(text, length, padding)使用 padding 指定的字符串从右侧填充 text 字符串到指定长度 length。如果 text 比 length 更长,则会截断到 length 的长度。FROM_BASE64(string)将 Base64 编码的 string 字符串解码为字符串。如果 string 为 NULL,则返回 NULL。TO_BASE64(string)将 string 表示的字符串编码为 Base64 字符串。ASCII(string)返回 string 字符串中第一个字符的 ASCII 码。如果 string 为 NULL,则返回 NULL。例如 ASCII('an apple') 返回97,因为首字母 'a' 的 ASCII 编码是97。CHR(integer)返回编码为 integer 的 ASCII 字符。例如 CHR(97) 返回 'a'。ENCODE(string, charset)将 string 字符串转码为 charset 指定的字符集编码的 BINARY 类型,例如 ENCODE(hello, 'GBK')。DECODE(binary, charset)将 binary 表示的 BINARY 类型以 charset 指定的字符集解码,例如 DECODE(binary_field, 'UTF-16LE')。INSTR(string1, string2)返回 string2 在 string1 字符串中首次出现的位置。如果任意参数为 NULL,结果为 NULL。LEFT(string, n)返回 string 从左起前 n 个字符。如果 n 为负数,则返回空字符串。如果任意参数为 NULL,结果为 NULL。RIGHT(string, n)返回 string 从右起后 n 个字符。如果 n 为负数,则返回空字符串。如果任意参数为 NULL,结果为 NULL。LOCATE(string1, string2[, integer])返回跳过 integer 个字符后,string1 在 string2 中首次出现的位置(参数顺序与 INSTR 函数相反)。如果未找到,则返回0。如果任意参数为 NULL,结果为 NULL。REGEXP(string, regex)如果 regex 表示的正则表达式可以匹配 string 中的字符串的任意子串,那么返回 TRUE,否则返回 FALSE。如果任意参数为 NULL,结果为 NULL。REVERSE(string)反转 string 字符串。如果任意参数为 NULL,结果为 NULL。SPLIT_INDEX(string, separator, index)将 string 表示的字符串以 separator 指定的分隔符拆分,并获取第 index 项,返回值为字符串 VARCHAR 类型。其中 index 从0开始计数。[1.13.2版本已删除]SPLIT(string, separator)将 string 表示的字符串以 separator 指定的分隔符拆分,并返回一个 Row 类型的对象。STR_TO_MAP(string1[, string2, string3])将 string1 字符串用 string2 提供的数据分隔符(默认为半角逗号

,

)和 string3 提供的键值间分隔符(默认为半角等号

=

)进行拆分,结果为键值对

MAP<string, string=""></string,>

类型。例如 STR_TO_MAP('k1=v1,k2=v2,k3=v3') 返回键值对(非字符串){'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}。SUBSTR(string[, pos[, length]])返回 string 字符串从 pos 位置开始,长度为 length 的子串。如果不提供 length,则默认到该字符串尾部。EXPLODE(inputStr, separator)将某个字符串分割为一张有多行的临时表。这个函数属于 Table Function,需要使用 LATERAL TABLE ( ) 关键字来引用此动态生成的临时表并作为 JOIN 条件的右表。GET_ROW_ARITY(row)获取某个 Row 类型对象 row 的列数。GET_ROW_FIELD_STR(row, index)获取某个 Row 类型对象 row 的第 index 列的值,index 从0开始计数。返回值为字符串 VARCHAR 类型。GET_JSON_OBJECT(json_str, path_str)按 path_str 指定的 JSONPath 路径,获取某个 JSON 字符串 json_str 中的元素,可以任意嵌套。支持的 JSONPath 语法:

$

表示根对象,

.

表示子元素,

[]

表示数组索引,

*

为数组索引 [] 的通配符。IS_ALPHA(content)判断字符串是否只包含字母。IS_DIGITS(content)判断字符串是否只包含数字。MD5(string)返回字符串的 MD5 值。POSITION(string1 IN string2)返回目标字符串 x 在被查询字符串y里第一次出现的位置。如果目标字符串 x 在被查询字符串 y 中不存在,返回值为0。SHA1返回字符串 expr 的 SHA1 值。SHA256返回字符串 expr 的 SHA256 值。

示例

||

功能描述:连接两个字符串,返回两个字符串拼接后的结果,等同于 CONCAT(string1, string2)
语法:string1 || string2
示例测试语句:SELECT string1 || string2 FROM Test ;
测试数据和结果:

测试数据(VARCHAR string1)

测试数据(VARCHAR string2)

测试结果(VARCHAR)
vStreamvStream

CHAR_LENGTH

功能描述:返回字符串的长度。
语法:CHAR_LENGTH( string)
示例测试语句:SELECT CHAR_LENGTH(var1) AS length FROM Test;
测试数据和结果:

测试数据(VARCHAR var1)

测试结果(INT length)
vStream7

CHARACTER_LENGTH

功能描述:与 CHAR_LENGTH(string) 相同。
语法:CHARACTER_LENGTH(string)
示例测试语句:SELECT CHAR_LENGTH(var1) AS length FROM Test;
测试数据和结果:

测试数据(VARCHAR var1)

测试结果(INT length)
vStream7

LOWER

功能描述:返回小写字符的字符串。
语法:LOWER(string)
示例测试语句:SELECT LOWER(var1) AS lower FROM Test;
测试数据和结果:

测试数据(VARCHAR var1)

测试结果(VARCHAR lower)
vStreamvstream

UPPER

功能描述:返回大写字符的字符串。
语法:UPPER( string)
示例测试语句:SELECT UPPER(var1) AS upper FROM Test;
测试数据和结果:

测试数据(VARCHAR var1)

测试结果(VARCHAR upper)
vStreamVSTREAM

TRIM

功能描述:从 string2 中除去字符串首尾/首位/末尾的 string1。默认情况下,首尾的空格都被删除。
语法:TRIM({BOTH | LEADING | TRAILING } string1 FROM string2 )
示例测试语句:SELECT TRIM(BOTH string1 FROM string2) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR string1)

测试数据(VARCHAR string2)

测试结果(VARCHAR res)
aavStreamavStream

CONCAT

功能描述:拼接两个或多个字符串值从而组成一个新的字符串。如果任一参数为 NULL 时,则跳过该参数。
语法:CONCAT( string1, string2 …)
示例测试语句:SELECT CONCAT('123', '456', 'abc', 'def') AS res FROM Test;
测试数据和结果:'123456abcdef'

测试数据(VARCHAR string1)

测试数据(VARCHAR string2)

测试数据(VARCHAR string3)

测试数据(VARCHAR string4)

测试结果(VARCHAR res)
123456abcdef123456abcdef

CONCAT_WS

功能描述:使用指定的分隔符 separator 连接多个字符串。如果 separator 为 NULL,则结果为 NULL。如果某个字符串为 NULL,则跳过它。但是不会跳过空字符串。
语法:CONCAT_WS(separator,string1,string2, …)
示例测试语句:SELECT CONCAT_WS(separator, string1,string2, string3) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR separator)

测试数据(VARCHAR string1)

测试数据(VARCHAR string2)

测试数据(VARCHAR string3)

测试结果(VARCHAR res)
-AABBCCAA-BB-CC

INITCAP

功能描述:将 string 中的单词,转为以大写字母开头,其他是小写字母(首字母大写)的形式。
语法:INITCAP(string)
示例测试语句:SELECT INITCAP(var1) AS str FROM Test;
数据和结果:

测试数据(VARCHAR var1)

测试结果(VARCHAR str)
i have a dreamI Have A Dream

IS_ALPHA

功能描述:判断字符串是否只包含字母。
语法:IS_ALPHA(content)
示例测试语句:SELECT IS_ALPHA(content) AS result FROM Test;
测试数据和结果:

测试数据(VARCHAR content)

测试结果(BOOLEAN result)
vStreamtruevStream123false''falsenullfalse

IS_DIGITS

功能描述:判断字符串是否只包含数字。
语法:IS_DIGITS(content)
示例测试语句:SELECT IS_DIGITS(content) AS result FROM Test;
测试数据和结果:

测试数据(VARCHAR content)

测试结果(BOOLEAN case_result)
58.0true58true58plfalse''falsenullfalse

LPAD

功能描述:使用 padding 指定的字符串从左侧填充 text 字符串到指定长度 length。如果 text 比 length 更长,则会截断到 length 的长度。
语法:LPAD(text , length , padding)
示例测试语句:SELECT LPAD(test, length, padding) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR text)

测试数据(INT length)

测试数据(VARCHAR padding)

测试结果(VARCHAR res)
vStream3hellohelvStream-1hello''vStream12hellohellovStream

RPAD

功能描述:使用 padding 指定的字符串从右侧填充 text 字符串到指定长度 length。如果 text 比 length 更长,则会截断到 length 的长度。
语法:RPAD(text , length , padding)
示例测试语句:SELECT RPAD(text, length, padding) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR text)

测试数据(INT length)

测试数据(VARCHAR padding)

测试结果(VARCHAR res)
vStream3hellovStvStream-1hello''vStream12hellovStreamhello

MD5

功能描述:返回字符串的 MD5 值。
语法:MD5(string)
示例测试语句:SELECT MD5(content) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR content)

测试结果(VARCHAR res)
abc900150983cd24fb0d6963f7d28e17f72

OVERLAY

功能描述:将 string1 从第 start_pos 位(start_pos 从1开始计数)开始的子串替换为 string2。可以指定替换的长度。
语法:SELECT OVERLAY(string1 PLACING string2 FROM start_pos [ FOR length ])
示例测试语句:SELECT OVERLAY(string1 PLACING string2 FROM start_pos FOR length) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR string1)

测试数据(VARCHAR string2)

测试数据(INT start_pos)

测试数据(INT length)

测试结果(VARCHAR res)
vStreamabc22vabcream

POSITION

功能描述:返回目标字符串 x 在被查询字符串 y 里第一次出现的位置。如果目标字符串 x 在被查询字符串 y 中不存在,返回值为0。
语法:POSITION(string1 IN string2)
示例测试语句: SELECT POSITION(string1 IN string2) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR string1)

测试数据(VARCHAR string2)

测试结果(VARCHAR res)
eavStream5

GET_JSON_OBJECT(json_str, path_str)

功能描述:按 path_str 指定的 JSONPath 路径,获取某个 JSON 字符串 json_str 中的元素,可以任意嵌套。支持的 JSONPath 语法:

$

表示根对象,

.

表示子元素,

[]

表示数组索引,

*

为数组索引 [] 的通配符。
语法:GET_JSON_OBJECT(json_str, path_str)
示例测试语句:SELECT GET_JSON_OBJECT(json_str, path_str) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR json_str)
{"school": {"student":[{"num":8,"type":"A"},{"num":9,"type":"B"}],"teacher":{"num":200,"type":"A"} },"headmaster":"mark" }
测试数据(VARCHAR path_str)

测试结果(VARCHAR res)
$.school{"student":[{"num":8,"type":"A"},{"num":9,"type":"B"}], "teacher":{"num":200,"type":"A"}}$.school.student[1]{"num":9,"type":"B"}$.school.teacher{"num":200,"type":"A"}$.headmastermark

REPLACE

功能描述:将 string1 字符串中所有的 string2 替换为 string3。
语法:REPLACE(string1, string2, string3)
示例测试语句:SELECT REPLACE( string1, string2, string3) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR string1)

测试数据(VARCHAR string2)

测试数据(VARCHAR string3)

测试结果(VARCHAR res)
bananaaAbAnAnA

SHA1

功能描述:返回字符串 expr 的 SHA1 值。
语法:SHA1(expr)
示例测试语句:SELECT SHA1(expr) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR expr)

测试结果(VARCHAR res)
abca9993e364706816aba3e25717850c26c9cd0d89d

SHA256

功能描述:返回字符串 expr 的 SHA256 值。
语法:SHA256(expr)
示例测试语句:SELECT SHA256(expr) FROM Test;
测试数据和结果:

测试数据(VARCHAR expr)

测试结果(VARCHAR res)
abcba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

5.时间函数

时间函数的函数名和功能描述如下:

函数名

功能描述

函数名

功能描述
DATE string将 "yyyy-MM-dd" 形式表示的字符串转为 SQL 日期(DATE)类型。TIME string将 "HH:mm:ss" 形式表示的字符串转为 SQL 时间(TIME)类型。TIMESTAMP string将 "yyyy-MM-dd HH:mm:ss[.SSS]" 形式的字符串转为 SQL 时间戳(TIMESTAMP)类型。INTERVAL string range接受 "dd hh:mm:ss.fff" 形式的字符串(毫秒),或者 "yyyy-MM" 形式的字符串(月)。

  • 对于毫秒,可以接受 DAY、MINUTE、DAY TO HOUR、DAY TO SECOND 作为 range。
  • 对于月,接受 YEAR 或 YEAR TO MONTH 作为 range。例如 INTERVAL '10 00:00:00.004' DAY TO SECONDINTERVAL '10' DAYINTERVAL '2-10' YEAR TO MONTH
    CURRENT_DATE返回当前的 SQL DATE 格式表示的日期(UTC)。CURRENT_TIME返回当前的 SQL TIME 格式表示的时间(UTC)。CURRENT_TIMESTAMP返回当前 SQL TIMESTAMP 格式表示的时间戳(UTC)。LOCALTIME返回本地时区表示的 SQL 时间。LOCALTIMESTAMP返回本地时区表示的 SQL 时间戳。EXTRACT(timeintervalunit FROM temporal)获取时间点或时间段字符串中的某项。例如
    EXTRACT(DAY FROM DATE '2006-06-05')
    
    返回5,而
    EXTRACT(YEAR FROM DATE '2018-06-12')
    
    则返回2018。YEAR(date)返回指定日期中的年份,等价于 EXTRACT(YEAR FROM date)。例如
    YEAR(DATE '2020-08-12')
    
    返回2020。QUARTER(date)返回指定日期的季度,等价于 EXTRACT(QUARTER FROM date)。例如
    QUARTER(DATE '2012-09-10')
    
    返回3。MONTH(date)返回指定日期的月份,等价于 EXTRACT(MONTH FROM date)。例如
    MONTH(DATE '2012-09-10')
    
    返回9。WEEK(date)返回指定日期的周数,即当年的第几周,等价于 EXTRACT(WEEK FROM date)。例如
    WEEK(DATE '1994-09-27')
    
    返回39。DAYOFYEAR(date)返回指定日期在当年的天数,即当年的第几天(范围是[1,366]),等价于 EXTRACT(DOY FROM date)。例如
    DAYOFYEAR(DATE '1994-09-27')
    
    返回270。DAYOFMONTH(date)返回指定日期在当月的天数,即当月的第几天(范围是[1,31]),等价于 EXTRACT(DAY FROM date)。例如
    DAYOFMONTH(DATE '1994-09-27')
    
    返回27。DAYOFWEEK(date)返回指定日期在本周的天数,即本周的第几天(范围是[1,7]),等价于 EXTRACT(DOW FROM date)。例如
    DAYOFWEEK(DATE '1994-09-27')
    
    返回3。HOUR(timestamp)返回指定时间戳的小时部分(范围是[0,23])。等价于 EXTRACT(HOUR FROM timestamp)。例如
    HOUR('2017-10-02 12:25:44')
    
    返回12。MINUTE(timestamp)返回指定时间戳的分钟部分(范围是[0,59])。等价于 EXTRACT(MINUTE FROM timestamp)。例如
    MINUTE('2017-10-02 12:25:44')
    
    返回25。SECOND(timestamp)返回指定时间戳的秒部分(范围是[0,59])。等价于 EXTRACT(SECOND FROM timestamp)。例如
    SECOND('2017-10-02 12:25:44')
    
    返回44。FLOOR(timepoint TO timeintervalunit)将一个时间点向下取整,例如 FLOOR(TIME '12:44:31' TO MINUTE) 返回12:44:00。CEIL(timepoint TO timeintervalunit)将一个时间点向上取整,例如 CEIL(TIME '12:44:31' TO MINUTE) 返回12:45:00。(timepoint, temporal) OVERLAPS (timepoint, temporal)判断两个时间段是否重叠。例如 (TIME
    '2:55:00', INTERVAL '1' HOUR) OVERLAPS (TIME
    '3:30:00', INTERVAL '2' HOUR) 返回 TRUE;而 (TIME
    '9:00:00', TIME '10:00:00') OVERLAPS (TIME
    '10:15:00', INTERVAL '3' HOUR) 返回 FALSE。TO_TIMESTAMP(string, simple_format)将字符串格式的时间戳转为 Timestamp 类型。DATE_FORMAT_SIMPLE (timestamp, simple_format)将 BIGINT 类型以毫秒为单位的 Unix 时间戳格式化为字符串。DATE_FORMAT(timestamp, format)将 Timestamp 类型的时间戳格式化为字符串。TIMESTAMPADD(unit, interval, timestamp)对指定 timestamp 增加一个时间段(允许为负数),单位区间必须为 SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR 中的一种。例如
    TIMESTAMPADD(WEEK, 1, '2013-01-02')
    
    返回'2013-01-09'。TIMESTAMPDIFF(timepointunit, timepoint1, timepoint2)计算指定单位区间下,timepoint1 和 timepoint2 之间的时间差(允许为负数)。timepointunit 区间必须为 SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR 中的一种。例如
    TIMESTAMPDIFF(DAY, TIMESTAMP '2003-01-02 10:00:00', TIMESTAMP '2003-01-03 10:00:00')
    
    返回1,即相差正1天。CONVERT_TZ(string1, string2, string3)将 string1 表示的时间戳(必须是 'yyyy-MM-dd HH:mm:ss' 格式)从时区(允许缩写例如 "PST",全称例如 "Asia/Shanghai",或者任意时区例如 "GMT-8:00")string2 转换到时区 string3。例如 CONVERT('1970-01-01 00:00:00', 'UTC', 'America/Los_Angeles') 返回 '1969-12-31 16:00:00'。FROM_UNIXTIME(numeric[, string])返回 numeric 代表的 Unix 时间戳(从 1970-01-01 00:00:00 UTC 到现今的秒数)转为 'YYYY-MM-DD hh:mm:ss' 格式的字符串。默认使用 UTC+8 时区,即北京时间(Asia/Shanghai)。UNIX_TIMESTAMP()返回以秒为单位的 Unix 时间戳(从 1970-01-01 00:00:00 UTC 到现今的秒数),类型为 BIGINT。默认使用 UTC+8 时区,即北京时间(Asia/Shanghai)。UNIX_TIMESTAMP(string1[, string2])将 string1 字符串以 string2 的格式(可选,默认是 'yyyy-MM-dd HH:mm:ss')转为 Unix 时间戳,类型为 BIGINT。TO_DATE(string1[, string2])将 string1 字符串以 string2 的格式(可选,默认是 'yyyy-MM-dd HH:mm:ss')转为 DATE 格式。TO_TIMESTAMP(string1[, string2])将 string1 字符串以 string2 的格式(可选,默认是 'yyyy-MM-dd HH:mm:ss')转为 TIMESTAMP 格式。默认使用 UTC+8 时区,即北京时间(Asia/Shanghai)。NOW()返回当前的 SQL TIMESTAMP 时间戳,时区为 UTC。

    6.条件函数

条件函数的函数名和功能描述如下:

函数名

功能描述
CASE value
WHEN value1 [, value11 ]* THEN result1
[ WHEN valueN [, valueN1 ]* THEN resultN ]*
[ ELSE resultZ ]
END

  • 当满足 value1 ~ value11 的任意值时,返回 result1。
  • 当满足 valueN ~ valueN1 的任意值时,返回 resultN。
  • 否则返回 resultZ。
    CASE
    WHEN condition1 THEN result1
    [ WHEN conditionN THEN resultN ]
  • [ ELSE resultZ ]
    END
  • 当满足 condition1 时返回 result1。
  • 当满足 condition 时返回 resultN。
  • 否则返回 resultZ。
    NULLIF(value1, value2)如果 value1 与 value2 相同,则返回 NULL,否则返回第一个值。例如 NULLIF(5, 5) 返回 NULL,而 NULLIF(5, 0) 返回5。COALESCE(value, value [, value ]* )如果前值是 NULL,则提供一个后续的值,例如 COLAESCE(NULL, 5) 则返回5。IF(condition, true_value, false_value)如果 condition 的条件满足,返回 true_value,否则返回 false_value。例如,IF(2 > 1, 2, 1) 返回2,而 IF (1 > 2, 99, 100) 返回100。IS_ALPHA(string)判断字符串是不是仅由纯字母组成。如果是,则返回 true,否则返回 false。IS_DECIMAL(string)判断字符串是不是一个合法的数字(整数、小数、负数均可)。如果是,则返回 true,否则返回 false。IS_DIGIT(string)判断字符串是不是仅由纯数字组成(即无符号整数)。如果是,则返回 true,否则返回 false。IF_NULL_STR(str, defaultValue)如果 str 不为 NULL,则返回 str 本身;如果 str 为 NULL,则返回第二项参数 defaultValue。

    7.类型转换函数

注意:如果使用 CAST() 函数,将时间段 INTERVAL 转为数字,则结果会是字面值(可能不符合预期)。例如

CAST(INTERVAL '1234' MINUTE AS BIGINT)

,则结果会是字面值1234,而非时间段表示的毫秒值。

函数名

功能描述
CAST(value AS type)将某个值转为 type 类型,例如 CAST(

hello

AS VARCHAR) 会将

hello

字段转为 VARCHAR 类型。

示例

CAST

功能描述:将某个值转为 type 类型。
语法:CAST(value AS type)
示例测试语句:SELECT CAST(var1 AS VARCHAR) FROM TEST;
测试数据和结果:

测试数据(INT var1)

测试结果 VARCHAR
58'58'

8.Hash函数

哈希函数的函数名和功能描述如下:

函数名

功能描述
MD5(string)以 32 个十六进制数字的字符串形式返回 string 的 MD5 哈希值;如果字符串为

NULL

,则返回

NULL

。SHA1(string)以 56 个十六进制数字的字符串形式返回 string 的 SHA-224 哈希值;如果字符串为

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

9.其他标量函数

值访问函数

值访问函数的函数名和功能描述如下:

函数名

功能描述
tableName.compositeType.field访问复合类型(Tuple、POJO)等的字段。tableName.compositeType.*访问 Tuple 或 POJO 的所有字段。

值构造函数

值构造函数的函数名和功能描述如下:

函数名

功能描述
(value, [, value])
ROW(value, [, value]
)创建一个包含若干值的行。两种写法完全等价。ARRAY '[' value [, value ]* ']'创建一个包含若干值的数组。MAP '[' key, value [, key, value ]* ']'创建一个包含若干键值对的映射。

集合函数

集合函数包括数组(Array)和键值对映射(Map)的操作,函数名和功能描述如下:

函数名

功能描述
CARDINALITY(array)返回某个数组的长度。array '[' index ']'返回某个数组的指定位置的项(下标从1开始)。ELEMENT(array)返回单元素数组的内容(如果数组为空则返回 NULL;如果数组存放的元素大于一个,则抛出异常)。CARDINALITY(map)返回 map 中键值对的总个数。map '[' key ']'返回 map 中指定 key 所对应的值。

分组函数

分组函数用来做 GROUP BY 分组后的表示,函数名和功能描述如下:

函数名

功能描述
GROUP_ID()返回一个唯一标识该 GROUP 所有键的整数。GROUPING(expression1 [, expression2]* )
GROUPING_ID(expression1 [, expression2]* )返回指定分组表达式的分组 ID(二进制矢量转为十进制数)。

10.聚合函数

函数

函数名

功能描述
COUNT([ ALL ] expression | DISTINCT expression1 [, expression2])默认情况和 ALL 时,返回 expression 表达式筛选后,非 NULL 值的输入行数。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计总行数。COUNT() COUNT(1)返回输入的总行数,含 NULL 值。AVG([ ALL | DISTINCT ] expression)默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入的算术平均值。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计求平均。SUM([ ALL | DISTINCT ] expression)默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入和。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计求和。MAX([ ALL | DISTINCT ] expression)默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入的最大值(不可用于 TIMESTAMP 类型)。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计求最大值。MIN([ ALL | DISTINCT ] expression)默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入的最小值(不可用于 TIMESTAMP 类型)。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计求最小值。STDDEV_POP([ ALL | DISTINCT ] expression)默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入的总体标准差。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计求总体标准差。STDDEV_SAMP([ ALL | DISTINCT ] expression)默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入的样本标准差。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计求样本标准差。VAR_POP([ ALL | DISTINCT ] expression)默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入的总体方差。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计求总体方差。VAR_SAMP([ ALL | DISTINCT ] expression) VARIANCE([ ALL | DISTINCT ] expression)默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入的样本方差。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计求样本方差。两种写法等价。COLLECT([ ALL | DISTINCT ] expression)默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入的非 NULL 输入的 MULTISET 集合(允许重复值)。如果所有值都是 NULL,则返回一个空集。RANK()返回某个数据在一组数据中的排名,前后调用的结果可能不连续。例如有五个数据,其中两个并列第二,那么 RANK() 的结果是1、2、2、4、5。DENSE_RANK()返回某个数据在一组数据中的排名,前后调用的结果保证连续。例如有五个数据,其中两个并列第二,那么 RANK() 的结果是1、2、2、3、4。ROW_NUMBER()为一组数据的每行分配一个递增且连续的值,从1开始,不会重复。例如有五个数据,其中两个并列第二,那么 RANK() 的结果是1、2、3、4、5。LEAD(expression [, offset] [, default] )在窗口计算中,访问当前行之后 offset 行的数据,默认 offset 为1,即访问下一行的数据。default 表示无数据时的默认值,如果不提供,默认为 NULL。LAG(expression [, offset] [, default])在窗口计算中,访问当前行之前 offset 行的数据,默认 offset 为1,即访问上一行的数据。default 表示无数据时的默认值,如果不提供,默认为 NULL。FIRST_VALUE(expression)返回一系列数据中,第一个数据。LAST_VALUE(expression)返回一系列数据中,最后一个数据。LISTAGG(expression [, separator])将一组数据使用给定的分隔符进行连接,最终返回一个连接后的字符串。默认分隔符是半角逗号

,

。类似于其他语言的 String.join() 方法。

示例

为方便演示,建立示例测试数据表 Test:

id

site_id

count

date
11452021-07-10231002021-07-13312302021-07-1442102021-07-14552052021-07-1464132021-07-15732202021-07-15855452021-07-16932012021-07-17

COUNT

功能描述:统计总行数。
语法:COUNT([ ALL ] expression | DISTINCT expression1 [, expression2] * )
示例测试语句:

SELECT COUNT(*) FROM Test;

测试结果:

测试语句

测试结果(nums)
SELECT COUNT(*) AS nums FROM Test;9SELECT COUNT(DISTINCT site_id) AS nums FROM Test;5

AVG

功能描述: 统计求平均。
语法:AVG([ ALL | DISTINCT ] expression)
示例测试语句: SELECT AVG(count) FROM Test;
测试数据和结果:

测试语句

测试结果(nums)
SELECT AVG(count) AS nums FROM Test;176.3

SUM

功能描述:统计求和。
语法: SUM([ ALL | DISTINCT ] expression)
示例测试语句: SELECT SUM(count) FROM Test;
测试数据和结果:

测试语句

测试结果(nums)
SELECT SUM(count) AS nums FROM Test;1569

MAX

功能描述:统计求最大值。
语法: MAX([ ALL | DISTINCT ] expression)
示例测试语句: SELECT MAX(count) FROM Test;
测试数据和结果:

测试语句

测试结果(nums)
SELECT MAX(count) AS nums FROM Test;545

MIN

功能描述:统计求最小值。
语法: MIN([ ALL | DISTINCT ] expression)
示例测试语句: SELECT MIN(count) FROM Test;
测试数据和结果:

测试语句

测试结果(nums)
SELECT MIN(count) AS nums FROM Test;13

STDDEV_POP

功能描述:统计求总体标准差。
语法: STDDEV_POP([ ALL | DISTINCT ] expression)
示例测试语句: SELECT STDDEV_POP(count) FROM Test;
测试数据和结果:

测试语句

测试结果(pop)
SELECT STDDEV_POP(count) AS pop FROM Test;156.18

VAR_POP

功能描述:统计求总体方差。
语法: VAR_POP([ ALL | DISTINCT ] expression)
示例测试语句: SELECT VAR_POP(count) FROM Test;
测试数据和结果:

测试语句

测试结果(pop)
SELECT VAR_POP(count) AS pop FROM Test;24390.7

FIRST_VALUE

功能描述:返回一系列数据中,第一个数据。
语法: FIRST_VALUE(expression)
示例测试语句: SELECT FIRST_VALUE(count) FROM Test;
测试数据和结果:

测试语句

测试结果(first)
SELECT FIRST_VALUE(count) AS first FROM Test;45

LAST_VALUE

功能描述:返回一系列数据中,最后一个数据。
语法: LAST_VALUE(expression)
示例测试语句: SELECT LAST_VALUE(count) FROM Test;
测试数据和结果:

测试语句

测试结果(last)
SELECT LAST_VALUE(count) AS last FROM Test;201


本文转载自: https://blog.csdn.net/Samooyou/article/details/125070879
版权归原作者 Samooyou 所有, 如有侵权,请联系我们删除。

“Flink -- 内置函数(ALL)”的评论:

还没有评论