用于处理字符编码、进制转换及 Base64 编解码。
相关产品
腾讯云数据仓库 TCHouse-X 产品页,含版本规格、价格与购买入口。
一、基础转换与编码
| 函数 |
说明 |
示例 |
| 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 |