字符串函数

最近更新时间:2026-05-06 16:28:13

我的收藏

基础转换与编码

用于处理字符编码、进制转换及 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)
通用进制转换。将数值 nf 进制转换为 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)
返回子串 subs 中首次出现的位置(索引从 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)
返回分隔符 dc 次出现之前(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'); -- 1
SELECT `contains`('Spark SQL', 'SPARK'); -- 0
startswith(left, right)
检测 left 是否符合前缀匹配规则 right
SELECT startswith('js SQL', 'js'); -- 1
SELECT startswith('js SQL', 'SQL'); -- 0
endswith(left, right)
检测 left 是否符合后缀匹配规则 right
SELECT endswith('js SQL', 'js'); -- 0
SELECT endswith('js SQL', 'SQL'); -- 1
luhn_check(str)
基于 Luhn 算法执行校验和检查,用于识别输入错误或无效的标识号码。
SELECT luhn_check('79927398713'); --1