函数参考
SPL 表达式函数:签名与说明
函数参考
函数用于 eval、stats、where 等表达式中。签名里的 T 表示与入参一致的返回类型;number 为数值;string 为字符串。
用法
比较运算符 =、!=、<、<=、>、>= 支持字符串与整数混比。
条件与空值
| 函数 | 签名 | 说明 |
|---|---|---|
if | if(boolean, T, T) -> T | 条件为真返回第二参数,否则第三参数 |
ifnull | ifnull(T, T) -> T | 第一参数为 null 时返回第二参数 |
isnull | isnull(T) -> integer | 是否为 null |
isnotnull | isnotnull(T) -> boolean | 是否非 null |
is null / is not null | 谓词形式 | 与上等价的谓词写法 |
nullif | nullif(T, T) -> T | 两参数相等时返回 null,否则返回第一参数 |
cidrmatch | cidrmatch(ip, cidr) -> boolean | IP 是否落在 CIDR 内 |
like | like(text, pattern) -> boolean | 模式匹配;% 多字符,_ 单字符 |
not like | not like(text, pattern) -> boolean | 模式不匹配 |
三角函数
| 函数 | 签名 | 说明 |
|---|---|---|
acos | acos(number) -> double | 反余弦 |
asin | asin(number) -> double | 反正弦 |
atan | atan(number) -> double | 反正切 |
atan2 | atan2(number, number) -> double | 双参数反正切 |
cos | cos(number) -> double | 余弦 |
cot | cot(number) -> double | 余切 |
sin | sin(number) -> double | 正弦 |
tan | tan(number) -> double | 正切 |
degrees | degrees(number) -> double | 弧度转角度 |
radians | radians(number) -> double | 角度转弧度 |
日期与时间
| 函数 | 签名 | 说明 |
|---|---|---|
adddate | adddate(date, INTERVAL expr unit) -> date | 日期加法 |
subdate | subdate(date, INTERVAL expr unit) -> date | 日期减法 |
date_add | date_add(date, INTERVAL expr unit) -> date | 同日期加法 |
date_sub | date_sub(date, INTERVAL expr unit) -> date | 同日期减法 |
now | now() -> datetime | 当前时间 |
date | date(expr) -> date | 取日期部分 |
time | time(expr) -> time | 取时间部分 |
timestamp | timestamp(date) -> timestamp | 转为时间戳类型 |
date_format | date_format(date, string) -> string | 按格式串输出 |
day / dayofmonth | dayofmonth(date) -> integer | 日(1–31) |
dayname | dayname(date) -> string | 星期名称 |
dayofweek | dayofweek(date) -> integer | 星期序号 |
dayofyear | dayofyear(date) -> integer | 一年中的第几天 |
month | month(date) -> integer | 月 |
monthname | monthname(date) -> string | 月名称 |
quarter | quarter(date) -> integer | 季度 |
week | week(date[, mode]) -> integer | 周序号 |
year | year(date) -> integer | 年 |
hour | hour(time) -> integer | 时 |
minute | minute(expr) -> integer | 分 |
second | second(time) -> integer | 秒 |
microsecond | microsecond(expr) -> integer | 微秒 |
time_to_sec | time_to_sec(time) -> long | 时间转秒 |
to_days | to_days(date) -> long | 日期转天数 |
from_days | from_days(N) -> date | 天数转日期 |
interval | INTERVAL expr unit | 时间间隔字面量 |
统计(用于 stats)
| 函数 | 签名 | 说明 |
|---|---|---|
count | count([field]) -> long | 计数 |
sum | sum(number) -> number | 求和 |
avg | avg(number) -> number | 平均 |
min | min(field) -> field | 最小 |
max | max(field) -> field | 最大 |
values | values(field) -> multivalue | 去重归并字段值 |
earliest | earliest(field) -> field | 最早侧聚合值;建议先 sort _time |
latest | latest(field) -> field | 最晚侧聚合值;建议先 sort _time |
var_pop / variance | var_pop(number) -> double | 总体方差 |
var_samp | var_samp(number) -> double | 样本方差 |
stddev_pop / std / stddev | stddev_pop(number) -> double | 总体标准差 |
stddev_samp | stddev_samp(number) -> double | 样本标准差 |
数学
| 函数 | 签名 | 说明 |
|---|---|---|
abs | abs(number) -> number | 绝对值 |
ceil / ceiling | ceil(number) -> number | 向上取整 |
floor | floor(number) -> number | 向下取整 |
round | round(number) -> number | 四舍五入 |
truncate | truncate(number, number) -> number | 截断小数位 |
exp | exp(number) -> number | e 的幂 |
ln | ln(number) -> double | 自然对数 |
log | log(number) -> double 或 log(number, number) -> double | 对数 |
log2 | log2(number) -> double | 以 2 为底 |
log10 | log10(number) -> double | 以 10 为底 |
pow / power | pow(number, number) -> number | 幂 |
sqrt | sqrt(number) -> number | 平方根 |
mod | mod(number, number) -> number | 取模 |
pi | pi() -> double | 圆周率 |
e | e() -> double | 自然常数 e |
rand | rand() -> number 或 rand(number) -> number | 随机数 |
sign | sign(number) -> number | 符号 |
conv | conv(string, int, int) -> string | 进制转换 |
crc32 | crc32(string) -> number | CRC32 |
算术运算符:+ - * / %。
文本
| 函数 | 签名 | 说明 |
|---|---|---|
tostring | tostring(value[, format]) -> string | 转为字符串;数字可选 hex / commas / duration |
lower | lower(string) -> string | 小写 |
upper | upper(string) -> string | 大写 |
trim | trim(string) -> string | 去两端空白 |
ltrim | ltrim(string) -> string | 去左空白 |
rtrim | rtrim(string) -> string | 去右空白 |
concat | concat(str1, str2, ...) -> string | 拼接 |
concat_ws | concat_ws(sep, string, ...) -> string | 带分隔符拼接 |
substr / substring | substring(string, int[, int]) -> string | 子串 |
left | left(string, int) -> string | 左侧截取 |
right | right(string, int) -> string | 右侧截取 |
length | length(string) -> integer | 长度 |
locate | locate(substr, string[, pos]) -> integer | 查找位置 |
replace | replace(string, from, to) -> string | 替换 |
ascii | ascii(string) -> integer | 首字符 ASCII |
strcmp | strcmp(string, string) -> integer | 字符串比较 |
regexp | regexp(...) | 正则相关 |
多值
| 函数 | 签名 | 说明 |
|---|---|---|
mvindex | mvindex(mv, integer) -> value | 取多值字段指定下标 |
常与命令 makemv / mvexpand / mvcombine 配合。
窗口函数
| 函数 | 签名 | 说明 |
|---|---|---|
row_number | row_number() -> integer | 分区内行号 |
rank | rank() -> integer | 排名(可并列跳号) |
dense_rank | dense_rank() -> integer | 密集排名 |
类型转换
引擎提供 cast_to_string / cast_to_int / cast_to_long / cast_to_double / cast_to_boolean / cast_to_date / cast_to_time / cast_to_timestamp / cast_to_datetime 等转换函数,按目标类型选用。