Skip to content

运算符和函数

提示

关于 Apache Calcite 支持的函数的详细信息,请参见官方文档

1.聚合函数

1.1.AVG

sql
AVG( [ ALL | DISTINCT ] numeric)

返回所有输入值的平均值(算术平均值),使用时数据类型将按以下方式更改:

输入类型返回类型最小标度
DECIMALBIGINTINTEGERSMALLINTTINYINTDECIMAL16
DOUBLEREALDOUBLE

1.2.COUNT

sql
COUNT( [ ALL | DISTINCT ] value [, value ]*)

返回值不为空的输入行数(如果值是复合值,则完全不为空)。

1.3.MAX

sql
MAX( [ ALL | DISTINCT ] value)

返回所有输入值中的最大值。

1.4.MIN

sql
SUM( [ ALL | DISTINCT ] numeric)

返回所有输入值中的最小值。

1.5.SUM

sql
SUM( [ ALL | DISTINCT ] numeric)

返回所有输入值的数值和。

1.6.ANY_VALUE

sql
ANY_VALUE( [ ALL | DISTINCT ] value)

返回所有输入值中的任意值,这在SQL标准中没有规定。

1.7.EVERY

sql
EVERY(condition)

如果条件的所有值都为TRUE,则返回TRUE。

1.8.SOME

sql
SOME(condition)

如果条件的至少一个值是TRUE,则返回TRUE。

2.JSON函数

2.1.JSON_TYPE

sql
JSON_TYPE(jsonValue)

返回JSON类型的字符串值。

2.2.FORMAT JSON

将值格式化成JSON形式。

2.3.JSON_VALUE

sql
JSON_VALUE(jsonValue, path [ RETURNING type ] [ { ERROR | NULL | DEFAULT expr } ON EMPTY ] [ { ERROR | NULL | DEFAULT expr } ON ERROR ] )

使用JSON路径表达式从JSON值中提取SQL标量。

2.4.JSON_QUERY

sql
JSON_QUERY(jsonValue, path [ RETURNING type ] [ { WITHOUT [ ARRAY ] | WITH [ CONDITIONAL | UNCONDITIONAL ] [ ARRAY ] } WRAPPER ] [ { ERROR | NULL | EMPTY ARRAY | EMPTY OBJECT } ON EMPTY ] [ { ERROR | NULL | EMPTY ARRAY | EMPTY OBJECT } ON ERROR ] )

使用JSON路径表达式从JSON值中提取JSON对象或JSON数组。

2.5.JSON_EXISTS

sql
JSON_EXISTS(jsonValue, path [ { TRUE | FALSE | UNKNOWN | ERROR } ON ERROR ] )

JSON值是否满足JSON路径表达式描述的搜索条件。

2.6.JSON_DEPTH

sql
JSON_DEPTH(jsonValue)

返回表示JSON值深度的整数值。

2.7.JSON_KEYS

sql
JSON_KEYS(jsonValue [, path ])

返回JSON值中的键的字符串表示。

2.8.JSON_PRETTY

sql
JSON_PRETTY(jsonValue)

返回JSON值经过美化的格式化输出形式。

2.9.JSON_LENGTH

sql
JSON_LENGTH(jsonValue [, path ])

返回JSON值的长度的整形值表示。

2.10.JSON_REMOVE

sql
JSON_REMOVE(jsonValue, path [, path ])

使用一系列路径表达式从JSON值中删除数据并返回结果。

2.11.JSON_STORAGE_SIZE

sql
JSON_STORAGE_SIZE(jsonValue)

返回用于存储JSON值二进制表示的字节数。

2.12.JSON_OBJECT

sql
JSON_OBJECT( jsonKeyVal [, jsonKeyVal ]* [ nullBehavior ] )

使用一组键值对构建JSON对象。

2.13.JSON_ARRAY

sql
JSON_ARRAY( [ jsonVal [, jsonVal ]* ] [ nullBehavior ] )

使用一组值构建JSON数组。

4.14.IS JSON VALUE

sql
jsonValue IS JSON [ VALUE ]

JSON值是否为JSON。

4.15.IS JSON OBJECT

sql
jsonValue IS JSON OBJECT

JSON值是否为JSON对象。

4.16.IS JSON ARRAY

sql
jsonValue IS JSON ARRAY

JSON值是否为JSON数组。

4.17.IS JSON SCALAR

sql
jsonValue IS JSON SCALAR

JSON值是否为JSON标量值。

3.正则表达式函数

3.1.POSIX REGEX CASE INSENSITIVE

sql
value 1 POSIX REGEX CASE INSENSITIVE value 2

大小写不敏感的POSIX正则表达式。

3.2.POSIX REGEX CASE SENSITIVE

sql
value 1 POSIX REGEX CASE SENSITIVE value 2

大小写敏感的POSIX正则表达式。

3.3.REGEXP_REPLACE

sql
REGEXP_REPLACE(string, regexp, rep [, pos [, occurrence [, matchType]]])

string 中从 pos 开始(如果省略,则默认为 1)匹配 regexp 的所有子字符串替换为 repoccurrence 指定要搜索匹配的哪个匹配项(如果省略,则默认为 1),matchType 指定如何执行匹配。

sql
REGEXP_REPLACE(string, regexp)

string 中所有与 regexp 匹配的子字符串替换为空字符串,并返回修改后的值。

4.数值函数

4.1.MOD

sql
MOD(numeric1, numeric2)

返回numeric1除以numeric2的余数(模数),只有当numeric1为负时,结果才为负。

4.2.EXP

sql
EXP(numeric)

返回enumeric次幂。

4.3.POWER

sql
POWER(numeric1, numeric2)

返回numeric1numeric2次幂。

4.4.LN

sql
LN(numeric)

返回numeric的自然对数(以e为底)。

4.5.LOG10

sql
LOG10(numeric)

返回以10为底的numeric对数。

4.6.ABS

sql
ABS(numeric)

返回numeric的绝对值。

4.7.RAND

sql
RAND([seed])

生成一个介于0和1之间(包括0和1)的随机双精度数,也可以使用seed初始化随机数生成器。

4.8.RAND_INTEGER

sql
RAND_INTEGER([seed, ] numeric)

生成一个介于0和numeric之间的随机整数,也可以使用seed初始化随机数生成器。

4.9.ACOS

sql
ACOS(numeric)

返回numeric的余弦值。

4.10.ASIN

sql
ASIN(numeric)

返回numeric的正弦值。

4.11.ATAN

sql
ATAN(numeric)

返回numeric的反正切值。

4.12.ATAN2

sql
ATAN2(numeric, numeric)

返回numeric1numeric2的反正切值。

4.13.SQRT

sql
SQRT(numeric)

返回numeric的平方根。

4.14.CBRT

sql
CBRT(numeric)

返回numeric的立方根。

4.15.COS

sql
COS(numeric)

返回numeric的余弦值。

4.16.COSH

sql
COSH(numeric)

返回numeric的双曲余弦值。

4.17.COT

sql
COT(numeric)

返回numeric的余切值。

4.18.DEGREES

sql
DEGREES(numeric)

numeric从弧度转换为度数。

4.19.RADIANS

sql
RADIANS(numeric)

numeric从度数转换为弧度。

4.20.ROUND

sql
ROUND(numeric1 [, integer2])

返回numeric1四舍五入到integer2位小数后的值,如果省略integer2,则返回最接近的整数。

4.21.SIGN

sql
SIGN(numeric)

返回numeric的符号。

4.22.SIN

sql
SIN(numeric)

返回numeric的正弦值。

4.23.SINH

sql
SINH(numeric)

返回numeric的双曲正弦值。

4.24.TAN

sql
TAN(numeric)

返回numeric的正切值。

4.25.TANH

sql
TANH(numeric)

返回numeric的双曲正切值。

4.26.TRUNCATE

sql
TRUNCATE(numeric1 [, integer2])

返回numeric1截断到integer2位小数后的值,如果省略integer2,则返回最接近的整数。

4.27.PI

sql
PI()

返回一个比其他任何值都更接近Pi的值。

5.字符串函数

5.1.UPPER

sql
UPPER(string)

返回string的大写形式。

5.2.LOWER

sql
LOWER(string)

返回string的小写形式。

5.3.INITCAP

sql
INITCAP(string)

返回一个字符串,其将``string`中每个单词转换器的第一个字母大写,其余字母小写。单词是由非字母数字字符分隔的字母数字字符序列。

5.4.TO_BASE64

sql
TO_BASE64(string)

返回string的Base64编码。

5.5.FROM_BASE64

sql
FROM_BASE64(string)

返回string的Base64解码。

5.6.MD5

sql
MD5(string)

计算string的MD5 128位校验和,并将其作为十六进制字符串返回。

5.7.SHA1

sql
SHA1(string)

计算string的SHA-1哈希值,并将其作为十六进制字符串返回。

5.8.SUBSTRING

sql
SUBSTRING(string FROM integer)

返回从给定点开始的字符串的子字符串。

sql
SUBSTRING(string FROM integer FOR integer)

返回字符串从给定点开始指定长度的子字符串。

sql
SUBSTRING(binary FROM integer)

返回二进制字符串从给定点开始的子字符串。

sql
SUBSTRING(binary FROM integer FOR integer)

返回二进制字符串从给定点开始指定长度的子字符串。

5.9.LEFT

sql
LEFT(string, length)

返回字符串string的前length个字符。

5.10.RIGHT

sql
RIGHT(string, length)

返回字符串string的后length个字符。

5.11.REPLACE

sql
REPLACE(char, search_string [, replace_string])

返回char中所有出现的search_string替换为replace_string的字符串。

5.12.TRANSLATE

sql
TRANSLATE(expr, fromString, toString)

返回expr,其中fromString中每个字符的所有出现都被toString中的相应字符替换,expr中不在fromString中的字符不会被替换。

5.13.CHR

sql
CHR(integer)

返回UTF-8代码为整数的字符。

5.14.CHAR_LENGTH

sql
CHAR_LENGTH(string)

返回字符串string中的字符数。

5.15.CHARACTER_LENGTH

sql
CHARACTER_LENGTH(string)

返回字符串string中的字符数。

5.16.||

sql
string || string

返回两个字符串的连接。

5.17.CONCAT

sql
CONCAT(string, string)

连接两个字符串,仅当两个字符串参数都为null时才返回null,否则将null视为空字符串。

sql
CONCAT(string [, string ]*)

连接一个或多个字符串,如果任何参数为null,则返回null。

sql
CONCAT(string [, string ]*)

连接一个或多个字符串,null被视为空字符串。

5.18.OVERLAY

sql
OVERLAY(string1 PLACING string2 FROM integer [ FOR integer2 ])

string1的子字符串替换为string2

sql
OVERLAY(binary1 PLACING binary2 FROM integer [ FOR integer2 ])

binary1的子字符串替换为binary2

5.19.POSITION

sql
POSITION(substring IN string)

返回substringstring中第一次出现的位置。

sql
POSITION(substring IN string FROM integer)

返回substringstring中从integer位置开始第一次出现的位置(非标准SQL)。

sql
POSITION(binary1 IN binary2)

返回binary1binary2中第一次出现的位置。

sql
POSITION(binary1 IN binary2 FROM integer)

返回binary1binary2中从integer位置开始第一次出现的位置(非标准SQL)。

5.20.ASCII

sql
ASCII(string)

返回字符串第一个字符的ASCII码,如果第一个字符是非ASCII字符,则返回其Unicode码值,如果字符串为空,则返回0。

5.21.REPEAT

sql
REPEAT(string, integer)

返回字符串string重复integer次的结果,如果integer小于 1 则返回空字符串。

5.22.SPACE

sql
SPACE(integer)

返回由integer个空格组成的字符串,如果integer小于 1 则返回空字符串。

5.23.STRCMP

sql
STRCMP(string1, string2)

返回两个字符串的比较结果,如果string1小于string2则返回-1,如果string1等于string2则返回0,如果string1大于string2则返回1。

5.24.SOUNDEX

sql
SOUNDEX(string)

返回字符串的语音表示,如果字符串使用多字节编码(如UTF-8)进行编码,则返回原始字符串。

5.25.DIFFERENCE

sql
DIFFERENCE(string1, string2)

返回两个字符串相似性的度量,即它们的SOUNDEX值共有的字符位置的数量:如果SOUNDEX的值相同,则返回4,如果SOUNDEX的值完全不同,则返回0。

5.26.REVERSE

sql
REVERSE(string)

返回字符串的逆序。

5.27.TRIM

sql
TRIM( { BOTH | LEADING | TRAILING } string1 FROM string2)

string2的开始/结束/两端删除仅包含string1中字符的最长字符串。

5.28.LTRIM

sql
LTRIM(string)

返回从string的开始删除所有空格的字符串。

5.29.RTRIM

sql
RTRIM(string)

返回从string的末尾删除所有空格的字符串。

5.30.SUBSTR

sql
SUBSTR(string, position [, substringLength ])

返回string的一部分,从position开始,长度为substringLengthSUBSTR使用输入字符集定义的字符计算长度。

5.31.LENGTH

sql
LENGTH(string)

返回字符串string的长度。

5.32.OCTET_LENGTH

sql
OCTET_LENGTH(binary)

返回二进制字符串binary的字节数。

5.33.LIKE

sql
string1 LIKE string2 [ ESCAPE string3 ]

如果string1string2匹配,则返回true,否则返回false。

5.34.SIMILAR TO

sql
string1 SIMILAR TO string2 [ ESCAPE string3 ]

string1是否与正则表达式string2匹配。

6.日期/时间函数

6.1.EXTRACT

sql
EXTRACT(timeUnit FROM datetime)

从日期时间值表达式中提取并返回指定时间单位的值。

6.2.FLOOR

sql
FLOOR(datetime TO timeUnit)

返回日期时间值表达式datetime的向下取整值,向下取整到指定的时间单位。

6.3.CEIL

sql
CEIL(datetime TO timeUnit)

返回日期时间值表达式datetime的向上取整值,向上取整到指定的时间单位。

6.4.TIMESTAMPDIFF

sql
TIMESTAMPDIFF(timeUnit, datetime, datetime2)

返回两个日期时间值表达式之间的差值,以指定的时间单位表示,相当于(datetime2 - datetime)时间单位。

6.5.LAST_DAY

sql
LAST_DAY(date)

返回数据类型为date的月份最后一天的日期,例如,对于DATE'2020-02-10'TIMESTAMP'2020-02-10 10:10:10',它都返回DATE'2020-02-29'

6.6.DAYNAME

sql
DAYNAME(datetime)

根据日期时间值返回一周中某一天的名称。

6.7.MONTHNAME

sql
MONTHNAME(datetime)

返回日期时间中月份的名称(根据连接的区域设置),例如对于DATE“2020-02-10”TIMESTAMP“2020-02-10 10:10:10”,它都返回二月

6.8.DAYOFMONTH

sql
DAYOFMONTH(date)

等价于EXTRACT(DAY FROM date),返回一个 1 到 31 之间的整型值。

6.9.DAYOFWEEK

sql
DAYOFWEEK(date)

等价于EXTRACT(DOW FROM date),返回一个 1 到 7 之间的整型值。

6.10.DAYOFYEAR

sql
DAYOFYEAR(date)

等价于EXTRACT(DOY FROM date),返回一个 1 到 366 之间的整型值。

6.11.YEAR

sql
YEAR(date)

等价于EXTRACT(YEAR FROM date),返回一个整型值。

6.12.QUARTER

sql
QUARTER(date)

等价于EXTRACT(QUARTER FROM date),返回一个 1 到 4 之间的整型值。

6.13.MONTH

sql
MONTH(date)

等价于EXTRACT(MONTH FROM date),返回一个 1 到 12 之间的整型值。

6.14.WEEK

sql
WEEK(date)

等价于EXTRACT(WEEK FROM date),返回一个 0 到 53 之间的整型值。

6.15.HOUR

sql
HOUR(date)

等价于EXTRACT(HOUR FROM datetime),返回一个 0 到 23 之间的整型值。

6.16.MINUTE

sql
MINUTE(date)

等价于EXTRACT(MINUTE FROM datetime),返回一个 0 到 59 之间的整型值。

6.17.SECOND

sql
SECOND(date)

等价于EXTRACT(SECOND FROM datetime),返回一个 0 到 59 之间的整型值。

6.18.TIMESTAMP_SECONDS

sql
TIMESTAMP_SECONDS(integer)

返回从1970-01-01 00:00:00开始到integer秒数的时间戳。

6.19.TIMESTAMP_MILLIS

sql
TIMESTAMP_MILLIS(integer)

返回从1970-01-01 00:00:00开始到integer毫秒数的时间戳。

6.20.TIMESTAMP_MICROS

sql
TIMESTAMP_MICROS(integer)

返回从1970-01-01 00:00:00开始到integer微秒数的时间戳。

6.21.UNIX_SECONDS

sql
UNIX_SECONDS(timestamp)

返回从1970-01-01 00:00:00开始到timestamp的秒数。

6.22.UNIX_MILLIS

sql
UNIX_MILLIS(timestamp)

返回从1970-01-01 00:00:00开始到timestamp的毫秒数。

6.23.UNIX_MICROS

sql
UNIX_MICROS(timestamp)

返回从1970-01-01 00:00:00开始到timestamp的微秒数。

6.24.UNIX_DATE

sql
UNIX_DATE(date)

返回从1970-01-01 00:00:00开始到date的日数。

5.25.DATE_FROM_UNIX_DATE

sql
DATE_FROM_UNIX_DATE(integer)

返回从1970-01-01 00:00:00开始到integer日数的日期。

6.26.DATE

sql
DATE(timestamp)

从时间戳中提取日期。

sql
DATE(timestampLtz)

从TIMESTAMP Ltz(一个瞬间,BigQuery的TIMESTAMP类型)中提取日期,假设为UTC。

sql
DATE(timestampLtz, timeZone)

从带时区的TIMESTAMP Ltz(一个瞬间,BigQuery的TIMESTAMP类型)中提取日期。

sql
DATE(string)

等价于CAST(string AS DATE)

sql
DATE(year, month, day)

返回对应年、月和日的日期值(均为整形值)。

6.27.CURRENT_TIME

sql
CURRENT_TIME

返回当前时区的当前时间,数据类型为带时区的时间戳。

6.28.CURRENT_TIMESTAMP

sql
CURRENT_TIMESTAMP

返回当前时区的当前日期和时间,数据类型为带时区的时间戳。

6.29.CURRENT_DATE

sql
CURRENT_DATE

返回当前时区的当前日期,数据类型为日期类型。

6.30.LOCALTIME

sql
LOCALTIME

返回当前时区的当前日期和时间,数据类型为时间类型。

sql
LOCALTIME(precision)

返回当前时区的当前日期和时间,数据类型为时间类型,精度为precision

6.31.LOCALTIMESTAMP

sql
LOCALTIMESTAMP

返回当前时区的当前日期和时间,数据类型为时间戳。

sql
LOCALTIMESTAMP(precision)

返回当前时区的当前日期和时间,数据类型为时间戳,精度为precision

7.其他函数

7.1.CAST

sql
CAST(value AS type)

将值转换为指定类型,整数类型之间的转换将截断为0。

7.2.COALESCE

sql
COALESCE(value, value [, value ]*)

如果第一个值为null,则提供一个值。例如COALESCE(NULL, 5)返回5。

7.3.GREATEST

sql
GREATEST(expr [, expr ]*)

返回表达式中的最大值。

7.4.NULLIF

sql
NULLIF(value, value)

如果两个值相等,则返回null,否则返回第一个值,例如NULLIF(5, 5) 返回 NULL,NULLIF(5, 0) 返回 5。

7.5.NVL

sql
NVL(value1, value2)

如果value1为null,则返回value2,否则返回value1

7.6.CASE

sql
CASE value
WHEN value1 [, value11 ]* THEN result1
[ WHEN valueN [, valueN1 ]* THEN resultN ]*
[ ELSE resultZ ]
END

简单场景:

sql
CASE
WHEN condition1 THEN result1
[ WHEN conditionN THEN resultN ]*
[ ELSE resultZ ]
END

7.7.DECODE

sql
DECODE(value, value1, result1 [, valueN, resultN ]* [, default ])

逐一将值与每个值N值进行比较,如果value等于valueN,则返回相应的resultN,否则返回默认值,如果未指定默认值,则返回NULL。

7.8.LEAST

sql
LEAST(expr [, expr ]* )

返回表达式中的最小值。

7.9.COMPRESS

sql
COMPRESS(string)

使用zlib压缩对字符串进行压缩,并将结果作为二进制字符串返回。

7.10.TYPEOF

sql
TYPEOF value

返回值的类型。

7.11.RAND_UUID

sql
RAND_UUID

生成一个随机的UUID。

7.12.SYSTEM_RANGE

sql
SYSTEM_RANGE(start, end[, increment]

从表中返回一个范围,并可选择增量。

8.序列函数

8.1.NEXTVAL

sql
NEXTVAL('seq_name')

推进序列并返回新值。

8.2.SETVAL

sql
SETVAL('seq_name', bigint)

设置序列的当前值。

8.3.CURRVAL

sql
CURRVAL('seq_name')

返回序列的当前值。

18624049226