基础转换与编码
用于处理字符编码、进制转换及 Base64 编解码。
函数 | 说明 | 示例 |
ascii(str) | 返回字符串 s 首字符的 Unicode/ASCII 码位。若为空串则返回 0。 | SELECT ascii('123'); -- 49 |
chr(n) / char(n) | ascii 的逆操作。将 Unicode 码点 n 转换为字符。若 n > 255 通常执行取模运算。 | SELECT char(97); -- 'a' |
hex(x) | 转十六进制。支持将数字、字符串或二进制转换为十六进制字符串。 | SELECT hex('Spark'); -- '537061726b' |
unhex(str) | 十六进制反转。将十六进制字符串还原为原始二进制/字符串格式。 | SELECT unhex('537061726b'); -- 'Spark' |
base64(bin) | 将二进制数据转换为 Base64 编码的文本字符串。 | SELECT base64(unhex('537061')); -- 'U3Bh' |
unbase64(str) | 将 Base64 编码的字符串解码回二进制数据。 | SELECT unbase64('U3BhcmsgU1FM'); -- 'Spark SQL' |
conv(n, f, t) | 通用进制转换。将数值 n 从 f 进制转换为 t 进制(支持 2 到 36 进制)。 | SELECT conv('100', 2, 10); -- '4' |
长度与位置检索
用于测量长度或定位子串。
函数 | 说明 | 示例 |
char_length(s) | 返回字符串中的字符个数(包含末尾空格)。 | SELECT char_length('SQL '); -- 4 |
length(s) | 返回字符数(在某些库中等同于 char_length,但在部分数据库指字节数)。 | SELECT length('Spark '); -- 6 |
bit_length(s) | 返回字符串占用的位长度(1 字符 = 8 bit)。 | SELECT bit_length('123'); -- 24 |
instr(s, sub) | 返回子串 sub 在 s 中首次出现的位置(索引从 1 开始)。 | SELECT instr('Spark', 'p'); -- 2 |
locate(sub, s, p) | 从位置 p 开始,查找 sub 在 s 中出现的位置。 | SELECT locate('aa', 'aaads', 2); -- 2 |
find_in_set(s, list) | 在以逗号分隔的列表 list 中查找 s 的索引位置。 | SELECT find_in_set('b', 'a,b,c'); -- 2 |
levenshtein(s1, s2) | 编辑距离。计算将 s1 转换为 s2 所需的最少单字符编辑次数(插入/删除/替换)。 | SELECT levenshtein('kitten', 'sitting'); -- 3 |
soundex(s) | 语音特征码。根据读音返回 4 位代码,用于查找读音相似但拼写不同的单词。 | SELECT soundex('Miller'); -- 'M460' |
子串提取与修剪
函数 | 说明 | 示例 |
left(s, len) | 返回字符串 s 最左侧的 len 个字符。 | SELECT left('Spark', 2); -- 'Sp' |
right(s, len) | 返回字符串 s 最右侧的 len 个字符。 | SELECT right('Spark', 1); -- 'k' |
substring(s, p) | 从位置 p 开始截取到末尾(注意:SQL 索引通常从 1 开始)。 | SELECT substring('Spark', 2); -- 'park' |
substring(s, p, l) | 从位置 p 开始,截取长度为 l 的子串。 | SELECT substring('Spark', 2, 2); -- 'pa' |
substring_index(s, d, c) | 返回分隔符 d 第 c 次出现之前(c为正)或之后(c为负)的所有内容。 | SELECT substring_index('a.b.c', '.', 2); -- 'a.b' |
ltrim(s) | 删除字符串左侧的所有空格。 | SELECT ltrim(' data'); -- 'data' |
rtrim(s) | 删除字符串右侧的所有空格。 | SELECT rtrim('data '); -- 'data' |
trim(s) / btrim(s) | 同时删除字符串两侧的空格。 | SELECT trim(' spark '); -- 'spark' |
empty2null(s) | 如果字符串是空字符串 '',则返回 NULL;否则返回原值。 | SELECT empty2null(''); -- NULL |
字符串修改与填充
函数 | 说明 | 示例 |
initcap(s) | 将字符串中每个单词的首字母转换为大写,其余小写。 | SELECT initcap('hi world'); -- 'Hi World' |
lower(s) / lcase(s) | 将字符串 s 中的所有字母转换为小写。 | SELECT lower('SQL'); -- 'sql' |
lpad(s, l, p) | 在字符串 s 左侧填充字符 p 直到总长度达到 l。 | SELECT lpad('hi', 4, '?'); -- '??hi' |
mask(s, U, L, D, O) | 数据脱敏。按类别替换字符: • U (upperChar): 大写替换符 (默认'X') • L (lowerChar): 小写替换符 (默认'x') • D (digitChar): 数字替换符 (默认'n') • O (otherChar): 其他字符替换符 (默认NULL, 即保留) | SELECT mask('Ab-12', 'X', 'x', 'n'); -- 'Xx-nn' |
overlay(s, r, p, l) | 覆盖替换。从字符串 s 的第 p 位开始,将长度为 l 的内容替换为字符串 r。 | SELECT overlay('Spark', '_', 3, 1); -- 'Sp_rk' |
repeat(s, n) | 将字符串 s 重复拼接 n 次。 | SELECT repeat('12', 2); -- '1212' |
replace(str, src, dst) | 将 str 中所有的 src 子串替换为 dst。 | SELECT replace('ABCabc', 'abc', 'DEF'); -- 'ABCDEF' |
reverse(s) | 将字符串 s 中的字符顺序反转。 | SELECT reverse('ABC'); -- 'CBA' |
rpad(s, l, p) | 在字符串 s 右侧填充字符 p 直到总长度达到 l。 | SELECT rpad('hi', 4, '?'); -- 'hi??' |
space(n) | 返回由 n 个空格组成的字符串。 | SELECT space(5); -- ' ' |
translate(s, from, to) | 字符级映射。按位置将 from 中的每个字符替换为 to 中对应位置的字符。 | SELECT translate('abc', 'ab', '12'); -- '12c' |
upper(s) / ucase(s) | 将字符串 s 中的所有字母转换为大写。 | SELECT upper('sql'); -- 'SQL' |
注意:
overlay 是系统保留关键字。在 SQL 脚本中调用该函数时,必须使用反引号将其括起来,例如:`overlay`(...)。拼接、正则与哈希
函数 | 说明 | 示例 |
concat(str1, str2, ...) | 将多个字符串参数拼接为一个字符串。若其中包含 NULL 值,该值将被忽略。 | SELECT concat('Hi', space(1), 'SQL'); -- 'Hi SQL' |
concat_ws(sep[, string]+) | 使用指定的分隔符 sep 连接多个字符串。连接过程中会自动跳过 NULL 值。 | SELECT concat_ws('-', '2025', NULL, '01'); -- '2025-01' |
regexp_extract(str, regexp[, idx]) | 根据正则表达式 regexp 匹配字符串 str,并返回指定捕获组索引 idx 对应的子串。 | -- 正则提取:提取第一个连续数字SELECT regexp_extract('ID: 100-200', '(\\\\d+)', 1); -- '100' |
regexp_replace(str, regexp, rep[, position]) | 在字符串 str 中搜索所有符合正则表达式 regexp 的子串,并将其统一替换为字符串 rep。 | SELECT regexp_replace('100-200', '(\\\\d+)', 'num'); -- num-num |
md5(binary) | 计算输入数据的 MD5 消息摘要(128 位)。结果以 32 位十六进制小写字符串形式返回。 | SELECT md5(cast('Spark' as binary)); -- 8cde774d6f7333752ed72cacddb05126 |
sha(binary) / sha1(binary) | 计算输入数据的 SHA-1 消息摘要(160 位)。结果以 40 位十六进制小写字符串形式返回。 | SELECT sha(CAST('another_binary' AS BINARY)); -- 798db8f340ba0f832ba7a96e183c2b03f8257b30 |
sha2(binary, bitLength) | 计算 SHA-2 系列哈希值。支持的位数 bitLength 包括 224, 256, 384, 512(输入 0 等同于 256)。若指定的位数不支持,则返回 NULL。 | SELECT sha2(CAST('binary_data_sha2' AS BINARY), 256); -- 641573c871686fd3f6da77421329ce81a8f6977465d52eef06fd4379fdcf6b19 |
特殊逻辑判断
函数 | 说明 | 示例 |
contains(left, right) | 判断 right 是否为 left 的子串。 | SELECT `contains`('Spark SQL', 'Spark'); -- 1SELECT `contains`('Spark SQL', 'SPARK'); -- 0 |
startswith(left, right) | 检测 left 是否符合前缀匹配规则 right。 | SELECT startswith('js SQL', 'js'); -- 1SELECT startswith('js SQL', 'SQL'); -- 0 |
endswith(left, right) | 检测 left 是否符合后缀匹配规则 right。 | SELECT endswith('js SQL', 'js'); -- 0SELECT endswith('js SQL', 'SQL'); -- 1 |
luhn_check(str) | 基于 Luhn 算法执行校验和检查,用于识别输入错误或无效的标识号码。 | SELECT luhn_check('79927398713'); --1 |