1、数值型函数
函数分类 | 函数名 | 语法格式 | 返回值类型 | 描述 | 示例 | 示例结果 |
---|---|---|---|---|---|---|
基本运算 | ABS | ABS(x) |
与输入相同 | 返回绝对值 | SELECT ABS(-3.5); |
3.5 |
SIGN | SIGN(x) |
TINYINT | 返回参数的符号(正数1,负数-1,0返回0) | SELECT SIGN(-10); |
-1 | |
取整函数 | CEIL/CEILING | CEIL(x) |
BIGINT | 向上取整 | SELECT CEIL(3.2); |
4 |
FLOOR | FLOOR(x) |
BIGINT | 向下取整 | SELECT FLOOR(3.7); |
3 | |
ROUND | ROUND(x[, d]) |
与输入相同 | 四舍五入(可指定小数位数) | SELECT ROUND(3.1415,2); |
3.14 | |
TRUNCATE | TRUNCATE(x, d) |
与输入相同 | 数值截断(非四舍五入) | SELECT TRUNCATE(3.1415,2); |
3.14 | |
幂指对数 | POW/POWER | POW(x, y) |
DOUBLE | 幂运算(x的y次方) | SELECT POW(2,3); |
8.0 |
EXP | EXP(x) |
DOUBLE | 自然指数函数(e的x次方) | SELECT EXP(1); |
2.718281828459045 | |
LN | LN(x) |
DOUBLE | 自然对数 | SELECT LN(E()); |
1.0 | |
LOG | LOG([base], x) |
DOUBLE | 对数函数(可指定底数) | SELECT LOG(2,8); |
3.0 | |
LOG10 | LOG10(x) |
DOUBLE | 以10为底的对数 | SELECT LOG10(100); |
2.0 | |
LOG2 | LOG2(x) |
DOUBLE | 以2为底的对数 | SELECT LOG2(8); |
3.0 | |
三角函数 | SIN | SIN(x) |
DOUBLE | 正弦函数(参数为弧度) | SELECT SIN(PI()/2); |
1.0 |
COS | COS(x) |
DOUBLE | 余弦函数 | SELECT COS(0); |
1.0 | |
TAN | TAN(x) |
DOUBLE | 正切函数 | SELECT TAN(PI()/4); |
1.0 | |
COT | COT(x) |
DOUBLE | 余切函数 | SELECT COT(1); |
0.6420926159343306 | |
反三角函数 | ASIN | ASIN(x) |
DOUBLE | 反正弦函数(参数范围[-1,1]) | SELECT ASIN(0.5); |
0.5235987755982989 |
ACOS | ACOS(x) |
DOUBLE | 反余弦函数 | SELECT ACOS(0.5); |
1.0471975511965979 | |
ATAN | ATAN(x) |
DOUBLE | 反正切函数 | SELECT ATAN(1); |
0.7853981633974483 | |
角度弧度 | DEGREES | DEGREES(x) |
DOUBLE | 弧度转角度 | SELECT DEGREES(PI()); |
180.0 |
RADIANS | RADIANS(x) |
DOUBLE | 角度转弧度 | SELECT RADIANS(180); |
3.141592653589793 | |
常数函数 | PI | PI() |
DOUBLE | 返回圆周率π | SELECT PI(); |
3.141592653589793 |
E | E() |
DOUBLE | 返回自然常数e | SELECT E(); |
2.718281828459045 | |
其他函数 | BIN | BIN(x) |
VARCHAR | 十进制转二进制 | SELECT BIN(10); |
“1010” |
CONV | CONV(x, from_base, to_base) |
VARCHAR | 进制转换 | SELECT CONV('10',10,2); |
“1010” | |
MOD | MOD(x, y) |
与输入相同 | 取模运算 | SELECT MOD(10,3); |
1 | |
PMOD | PMOD(x, y) |
与输入相同 | 正取模运算(结果始终为正) | SELECT PMOD(-10,3); |
2 | |
RAND | RAND([seed]) |
DOUBLE | 生成0-1的随机数(可选种子) | SELECT RAND(); |
0.123… | |
GREATEST | GREATEST(x1, x2,...) |
与输入相同 | 返回参数列表中的最大值 | SELECT GREATEST(3,5,1); |
5 | |
LEAST | LEAST(x1, x2,...) |
与输入相同 | 返回参数列表中的最小值 | SELECT LEAST(3,5,1); |
1 | |
SQRT | SQRT(x) |
DOUBLE | 平方根 | SELECT SQRT(9); |
3.0 | |
UUID_NUMERIC | UUID_NUMERIC() |
LARGEINT | 返回一个 LARGEINT 类型的 uuid。注意 LARGEINT 是一个 Int128,所以 uuid_numeric() 可能会得到负值。 | select uuid_numeric(); |
82218484683747862468445277894131281464 |
2、字符型函数
函数分类 | 函数名 | 语法格式 | 返回值类型 | 描述 | 示例 | 示例结果 |
---|---|---|---|---|---|---|
字符串修改 | APPEND_TRAILING_CHAR_IF_ABSENT |
APPEND_TRAILING_CHAR_IF_ABSENT(str, char) |
VARCHAR | 确保字符串以指定字符结尾 | SELECT APPEND_TRAILING_CHAR_IF_ABSENT('hello', '!'); |
“hello!” |
CONCAT |
CONCAT(str1, str2, ...) |
VARCHAR | 字符串拼接 | SELECT CONCAT('A','pache'); |
“Apache” | |
CONCAT_WS |
CONCAT_WS(sep, str1, str2, ...) |
VARCHAR | 带分隔符拼接 | SELECT CONCAT_WS('-','2025','08','16'); |
“2025-08-16” | |
LOWER /LCASE |
LOWER(str) |
VARCHAR | 转小写 | SELECT LOWER('DORIS'); |
“doris” | |
UPPER /UCASE |
UPPER(str) |
VARCHAR | 转大写 | SELECT UPPER('doris'); |
“DORIS” | |
REVERSE |
REVERSE(str) |
VARCHAR | 反转字符串 | SELECT REVERSE('123'); |
“321” | |
REPEAT |
REPEAT(str, n) |
VARCHAR | 重复字符串 | SELECT REPEAT('A',3); |
“AAA” | |
REPLACE |
REPLACE(str, old, new) |
VARCHAR | 字符串替换 | SELECT REPLACE('abc','b','B'); |
“aBc” | |
TRANSLATE |
TRANSLATE(str, from, to) |
VARCHAR | 字符级替换 | SELECT TRANSLATE('abc','ac','AC'); |
“AbC” | |
字符串截取 | SUBSTRING /SUBSTR |
SUBSTRING(str, pos[, len]) |
VARCHAR | 截取子串 | SELECT SUBSTRING('Apache',2,3); |
“pac” |
LEFT |
LEFT(str, len) |
VARCHAR | 左截取 | SELECT LEFT('Apache',3); |
“Apa” | |
RIGHT |
RIGHT(str, len) |
VARCHAR | 右截取 | SELECT RIGHT('Apache',3); |
“che” | |
TRIM |
TRIM([BOTH | LEADING | TRAILING] chars FROM str) |
VARCHAR | 去除首尾字符 | SELECT TRIM(' hello '); |
“hello” | |
字符串查找 | INSTR |
INSTR(str, substr) |
INT | 子串位置 | SELECT INSTR('Apache','che'); |
4 |
LOCATE |
LOCATE(substr, str[, pos]) |
INT | 子串定位 | SELECT LOCATE('a','Apache'); |
2 | |
POSITION |
POSITION(substr IN str) |
INT | 子串位置 | SELECT POSITION('che' IN 'Apache'); |
4 | |
字符串信息 | LENGTH /CHAR_LENGTH |
LENGTH(str) |
INT | 字符串长度 | SELECT LENGTH('Doris'); |
5 |
BYTE_LENGTH |
BYTE_LENGTH(str) |
INT | 字节长度 | SELECT BYTE_LENGTH('中国'); |
6 | |
BIT_LENGTH |
BIT_LENGTH(str) |
INT | 比特长度 | SELECT BIT_LENGTH('A'); |
8 | |
格式化函数 | FORMAT |
FORMAT(number, decimals) |
VARCHAR | 数字格式化 | SELECT FORMAT(1234.567, 2); |
“1,234.57” |
LPAD |
LPAD(str, len, pad_str) |
VARCHAR | 左填充 | SELECT LPAD('12',5,'0'); |
“00012” | |
RPAD |
RPAD(str, len, pad_str) |
VARCHAR | 右填充 | SELECT RPAD('12',5,'!'); |
“12!!!” | |
编码解码 | BASE64_ENCODE |
BASE64_ENCODE(str) |
VARCHAR | Base64编码 | SELECT BASE64_ENCODE('Doris'); |
“RG9yaXM=” |
BASE64_DECODE |
BASE64_DECODE(str) |
VARCHAR | Base64解码 | SELECT BASE64_DECODE('RG9yaXM='); |
“Doris” | |
URL_ENCODE |
URL_ENCODE(str) |
VARCHAR | URL编码 | SELECT URL_ENCODE('a b'); |
“a+b” | |
URL_DECODE |
URL_DECODE(str) |
VARCHAR | URL解码 | SELECT URL_DECODE('a+b'); |
“a b” | |
正则函数 | REGEXP_EXTRACT |
REGEXP_EXTRACT(str, pattern[, group]) |
VARCHAR | 正则提取 | SELECT REGEXP_EXTRACT('abc123','[a-z]+'); |
“abc” |
REGEXP_REPLACE |
REGEXP_REPLACE(str, pattern, repl) |
VARCHAR | 正则替换 | SELECT REGEXP_REPLACE('a1b2','\d','X'); |
“aXbX” | |
REGEXP_LIKE |
REGEXP_LIKE(str, pattern) |
BOOLEAN | 正则匹配 | SELECT REGEXP_LIKE('abc','^a'); |
true | |
JSON处理 | JSON_QUOTE |
JSON_QUOTE(str) |
VARCHAR | 添加JSON引号 | SELECT JSON_QUOTE('text'); |
“"text"“ |
JSON_UNQUOTE |
JSON_UNQUOTE(str) |
VARCHAR | 去除JSON引号 | SELECT JSON_UNQUOTE('\"text\"'); |
“text” |
3、日期函数
函数分类 | 函数名 | 语法格式 | 返回值类型 | 描述 | 示例 | 示例结果 |
---|---|---|---|---|---|---|
当前时间 | CURRENT_DATE |
CURRENT_DATE() |
DATE | 当前日期 | SELECT CURRENT_DATE(); |
2025-08-16 |
CURRENT_TIMESTAMP |
CURRENT_TIMESTAMP() |
DATETIME | 当前时间戳 | SELECT CURRENT_TIMESTAMP(); |
2025-08-16 15:30:45 | |
NOW |
NOW() |
DATETIME | 同CURRENT_TIMESTAMP | SELECT NOW(); |
2025-08-16 15:30:45 | |
UNIX_TIMESTAMP |
UNIX_TIMESTAMP([date]) |
BIGINT | 当前/指定时间的Unix时间戳 | SELECT UNIX_TIMESTAMP('2025-08-16'); |
1755302400 | |
时间提取 | YEAR |
YEAR(date) |
INT | 提取年份 | SELECT YEAR('2025-08-16'); |
2025 |
MONTH |
MONTH(date) |
INT | 提取月份(1-12) | SELECT MONTH('2025-08-16'); |
8 | |
DAY /DAYOFMONTH |
DAY(date) |
INT | 提取日(1-31) | SELECT DAY('2025-08-16'); |
16 | |
HOUR |
HOUR(datetime) |
INT | 提取小时(0-23) | SELECT HOUR('15:30:45'); |
15 | |
MINUTE |
MINUTE(datetime) |
INT | 提取分钟(0-59) | SELECT MINUTE('15:30:45'); |
30 | |
SECOND |
SECOND(datetime) |
INT | 提取秒(0-59) | SELECT SECOND('15:30:45'); |
45 | |
DAYOFWEEK |
DAYOFWEEK(date) |
INT | 星期几(1=周日,7=周六) | SELECT DAYOFWEEK('2025-08-16'); |
7 | |
DAYOFYEAR |
DAYOFYEAR(date) |
INT | 一年中的第几天(1-366) | SELECT DAYOFYEAR('2025-08-16'); |
228 | |
WEEKOFYEAR |
WEEKOFYEAR(date) |
INT | 一年中的第几周(1-53) | SELECT WEEKOFYEAR('2025-08-16'); |
33 | |
时间计算 | DATE_ADD |
DATE_ADD(date, INTERVAL expr unit) |
DATETIME | 日期加法 | SELECT DATE_ADD('2025-08-16',INTERVAL 1 DAY); |
2025-08-17 00:00:00 |
DATE_SUB |
DATE_SUB(date, INTERVAL expr unit) |
DATETIME | 日期减法 | SELECT DATE_SUB('2025-08-16',INTERVAL 1 MONTH); |
2025-07-16 00:00:00 | |
DATEDIFF |
DATEDIFF(expr1, expr2) |
INT | 计算日期差(天数) | SELECT DATEDIFF('2025-08-20','2025-08-16'); |
4 | |
TIMEDIFF |
TIMEDIFF(expr1, expr2) |
TIME | 计算时间差 | SELECT TIMEDIFF('15:30:45','10:00:00'); |
05:30:45 | |
TIMESTAMPDIFF |
TIMESTAMPDIFF(unit, expr1, expr2) |
BIGINT | 计算时间差(指定单位) | SELECT TIMESTAMPDIFF(HOUR,'2025-08-16 10:00:00','2025-08-16 15:30:00'); |
5 | |
时间转换 | FROM_UNIXTIME |
FROM_UNIXTIME(unix_timestamp[, format]) |
VARCHAR | Unix时间戳转日期 | SELECT FROM_UNIXTIME(1755302400); |
“2025-08-16 00:00:00” |
STR_TO_DATE |
STR_TO_DATE(str, format) |
DATE | 字符串转日期 | SELECT STR_TO_DATE('16,8,2025','%d,%m,%Y'); |
2025-08-16 | |
DATE_FORMAT |
DATE_FORMAT(date, format) |
VARCHAR | 格式化日期 | SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s'); |
“2025-08-16 15:30:45” | |
CONVERT_TZ |
CONVERT_TZ(dt, from_tz, to_tz) |
DATETIME | 时区转换 | SELECT CONVERT_TZ('2025-08-16 12:00:00','UTC','Asia/Shanghai'); |
2025-08-16 20:00:00 | |
特殊函数 | LAST_DAY |
LAST_DAY(date) |
DATE | 返回月份的最后一天 | SELECT LAST_DAY('2025-08-16'); |
2025-08-31 |
MAKEDATE |
MAKEDATE(year, dayofyear) |
DATE | 根据年份和天数创建日期 | SELECT MAKEDATE(2025,228); |
2025-08-16 | |
MAKETIME |
MAKETIME(hour, minute, second) |
TIME | 创建时间 | SELECT MAKETIME(15,30,45); |
15:30:45 | |
PERIOD_ADD |
PERIOD_ADD(YYYYMM, n) |
INT | 增加月份周期 | SELECT PERIOD_ADD(202508,2); |
202510 | |
PERIOD_DIFF |
PERIOD_DIFF(YYYYMM1, YYYYMM2) |
INT | 计算月份差 | SELECT PERIOD_DIFF(202510,202508); |
2 | |
TIMESTAMPADD |
TIMESTAMPADD(unit, interval, datetime) |
DATETIME | 时间加法 | SELECT TIMESTAMPADD(DAY,1,'2025-08-16'); |
2025-08-17 00:00:00 | |
TO_DAYS |
TO_DAYS(date) |
INT | 计算日期到0000-01-01的天数 | SELECT TO_DAYS('2025-08-16'); |
738785 | |
FROM_DAYS |
FROM_DAYS(N) |
DATE | 天数转日期 | SELECT FROM_DAYS(738785); |
2025-08-16 | |
UTC_TIMESTAMP |
UTC_TIMESTAMP() |
DATETIME | 当前UTC时间 | SELECT UTC_TIMESTAMP(); |
2025-08-16 07:30:45 |
文档更新时间: 2025-08-16 04:20 作者:操李红