45个常用SQL字符串处理函数的基础语法
|
admin
2025年8月30日 12:50
本文热度 32
|
在数据处理与分析中,字符串操作是不可或缺的环节。无论是清洗繁杂的文本数据、提取关键信息,还是格式化输出结果,都离不开 SQL 字符串处理函数。SQL 字符串处理函数覆盖了拼接、截取、替换、查找等多种应用场景,适配 MySQL、Oracle、Hive 等主流数据库,却因SQL语法细节和功能差异常让我们混淆。下面整理了 45 个常用 SQL 字符串处理函数,从基础的大小写转换到复杂的正则匹配、JSON 解析,一一简单介绍其作用、语法结构及应用示例,仅供参考。 一、字符串拼接函数1、CONCAT():将多个字符串拼接为一个字符串,任何参数为NULL则返回NULL。 - 语法:
CONCAT(str1, str2, ...) - 示例:
CONCAT('SQL', ' ', '字符串') → 'SQL 字符串'
2、CONCAT_WS():使用指定分隔符拼接字符串,忽略NULL值。 - 语法:
CONCAT_WS(separator, str1, str2, ...) - 示例:
CONCAT_WS('-', '2023', '10', NULL, '05') → '2023-10-05'
3、|| 运算符:字符串拼接(部分数据库支持,如Oracle、PostgreSQL)。 - 示例:
'Hello' || ' ' || 'World' → 'Hello World'
二、字符串长度与测量函数4、LENGTH() / LEN():返回字符串的字节数(LENGTH)或字符数(LEN,SQL Server)。 - 语法:
LENGTH(str) / LEN(str) - 示例:
LENGTH('中国') → 2(GBK编码);LEN('abc') → 3
5、CHAR_LENGTH() / CHARACTER_LENGTH():返回字符串的字符数(忽略编码,按字符计数)。 - 示例:
CHAR_LENGTH('中国abc') → 5
6、BIT_LENGTH():返回字符串的比特数(1字节=8比特)。 三、字符串截取与提取函数7、SUBSTRING() / SUBSTR():从指定位置截取指定长度的子串(start为正数从左开始,负数从右开始)。 - 语法:
SUBSTRING(str, start, length) / SUBSTR(str, start, length) - 示例:
SUBSTRING('SQL字符串', 2, 3) → 'QL字' ;SUBSTR('数据库', -2) → '据库'
8、LEFT():返回字符串左侧指定长度的子串。 - 示例:
LEFT('数据分析', 2) → '数据'
9、RIGHT():返回字符串右侧指定长度的子串。 - 示例:
RIGHT('Python', 3) → 'hon'
10、SUBSTRING_INDEX():按分隔符截取子串,count为正数取左侧第count个分隔符前的内容,负数取右侧。 - 语法:
SUBSTRING_INDEX(str, delimiter, count) - 示例:
SUBSTRING_INDEX('a.b.c.d', '.', 2) → 'a.b' ;SUBSTRING_INDEX('a.b.c.d', '.', -2) → 'c.d'
四、字符串替换与修改函数11、REPLACE():将字符串中所有old_str替换为new_str。 - 语法:
REPLACE(str, old_str, new_str) - 示例:
REPLACE('abc123abc', 'abc', 'xyz') → 'xyz123xyz'
12、INSERT():从start位置删除length长度的字符,替换为new_str。 - 语法:
INSERT(str, start, length, new_str) - 示例:
INSERT('Hello World', 7, 5, 'SQL') → 'Hello SQL'
13、TRANSLATE():按字符映射替换(from_str和to_str一一对应)。 - 语法:
TRANSLATE(str, from_str, to_str) - 示例:
TRANSLATE('123-abc', '1a', 'Xx') → 'X23-xbc'
14、REGEXP_REPLACE():用指定字符串替换匹配正则表达式的部分。 - 语法:
REGEXP_REPLACE(str, regex, replace_str) - 示例:
REGEXP_REPLACE('a1b2c3', '[0-9]', '*') → 'a*b*c*' ;REGEXP_REPLACE('hello_2023_world', '_(\\d+)_', '-') → 'hello-2023-world'
五、大小写转换函数15、UPPER() / UCASE():将字符串转为大写。 - 语法:
UPPER(str) / UCASE(str) - 示例:
UPPER('Hello') → 'HELLO'
16、LOWER() / LCASE():将字符串转为小写。 - 语法:
LOWER(str) / LCASE(str) - 示例:
LOWER('WORLD') → 'world'
17、INITCAP():将每个单词的首字母转为大写,其余小写(Oracle、PostgreSQL支持)。 - 示例:
INITCAP('hello world') → 'Hello World' ;initcap('hello world sql') → 'Hello World Sql'
六、空格处理函数18、LTRIM():去除字符串左侧空格。 - 示例:
LTRIM(' abc ') → 'abc '
19、RTRIM():去除字符串右侧空格。 - 示例:
RTRIM(' abc ') → ' abc'
20、TRIM():去除指定位置的指定字符(默认两侧空格)。 - 语法:
TRIM([BOTH/LEADING/TRAILING] trim_str FROM str) (默认去除两侧空格) - 示例:
TRIM('x' FROM 'xxabcxx') → 'abc' ;TRIM(LEADING ' ' FROM ' test') → 'test'
21、SPACE():生成n个空格的字符串。 - 示例:
CONCAT('a', SPACE(2), 'b') → 'a b'
七、字符串查找与定位函数22、LOCATE() / POSITION():返回子串在字符串中首次出现的位置(从1开始,未找到返回0)。 - 语法:
LOCATE(substr, str[, start]) / POSITION(substr IN str) - 示例:
LOCATE('ab', 'aababc') → 2;POSITION('cd' IN 'abc') → 0;LOCATE('ab', 'aabab', 2) → 4(从位置2开始查找)
23、INSTR():返回子串在字符串中首次出现的位置(Oracle等数据库,与LOCATE参数顺序相反)。 - 示例:
INSTR('abcde', 'cd') → 3;INSTR('hello world', 'o') → 5
24、FIELD():返回str在后续字符串列表中的位置(未找到返回0)。 - 语法:
FIELD(str, str1, str2, ...) - 示例:
FIELD('b', 'a', 'b', 'c') → 2
25、FIND_IN_SET():返回str在逗号分隔的字符串列表中的位置(未找到返回0)。 - 语法:
FIND_IN_SET(str, str_list) - 示例:
FIND_IN_SET('b', 'a,b,c,d') → 2;FIND_IN_SET('mysql', 'hive,mysql,spark') → 2
八、字符串拆分与合并函数26、SPLIT_STR():按分隔符拆分字符串,返回第pos个元素(MySQL支持)。 - 语法:
SPLIT_STR(str, delimiter, pos) - 示例:
SPLIT_STR('a,b,c,d', ',', 3) → 'c'
27、STRING_AGG():将多行字符串按分隔符合并(SQL Server、PostgreSQL等)。 - 语法:
STRING_AGG(expr, separator) - 示例:对表中
name 列('a','b','c') 执行STRING_AGG(name, ';') → 'a;b;c'
28、REGEXP_SPLIT_TO_TABLE():按正则表达式拆分字符串为多行(PostgreSQL支持)。 - 语法:
REGEXP_SPLIT_TO_TABLE(str, regex) - 示例:
REGEXP_SPLIT_TO_TABLE('a,b;c', '[;,]') → 返回3行:a 、b 、c
29、SPLIT()(部分数据库支持,如Hive、PostgreSQL):按分隔符将字符串拆分为数组。 - 示例:
SPLIT('a,b,c,d', ',') → ['a', 'b', 'c', 'd'] (数组格式)
30、split_part()(Hive等支持):按分隔符拆分字符串后,返回指定位置的子串(位置从1开始)。 - 语法:
split_part(str, delimiter, position) - 示例:
split_part('a,b,c,d', ',', 3) → 'c'
九、正则表达式函数31、REGEXP_LIKE():判断字符串是否匹配正则表达式(返回布尔值或1/0)。 - 语法:
REGEXP_LIKE(str, regex) - 示例:
REGEXP_LIKE('123abc', '^[0-9]+$') → 0(不匹配纯数字)
32、REGEXP_SUBSTR():返回字符串中匹配正则表达式的子串。 - 语法:
REGEXP_SUBSTR(str, regex) - 示例:
REGEXP_SUBSTR('abc123def', '[0-9]+') → '123' ;REGEXP_SUBSTR('a1b2c3d4', '[a-z]', 1, 3) → 'c' (从位置1开始,提取第3个小写字母)
33、regexp_extract()(Hive支持):通过正则表达式提取指定分组的内容(group_index=0返回整个匹配,1返回第一个分组)。 - 语法:
regexp_extract(str, regex, group_index) - 示例:
regexp_extract('user_123_name', 'user_(\\d+)_name', 1) → '123'
十、字符编码与转换函数34、ASCII():返回字符串首字符的 ASCII 码值(仅对单字节字符有效,多字节字符返回首字节的编码值,非完整字符编码)。 - 示例:ASCII('A') → 65(单字节字符,直接返回 ASCII 码);ASCII('中') → 178(GBK 编码下首字节值,编码不同结果不同);若需获取中文的 Unicode 编码,应使用UNICODE('中') → 20013
35、CHAR():将ASCII码转为对应字符。 - 示例:
CHAR(65, 66) → 'AB' ;CHAR(72, 101, 108, 108, 111) → 'Hello'
36、CONVERT() / CAST():转换字符串编码(CONVERT)或数据类型(CAST)。 - 语法:
CONVERT(str USING charset) / CAST(str AS type) - 示例:
CONVERT('测试' USING utf8) → 按utf8编码转换;CAST('123' AS UNSIGNED) → 123
十一、字符串填充函数37、LPAD():在字符串左侧用指定字符填充,直到达到指定长度(若原字符串长度超过指定长度,则截断)。 - 语法:
LPAD(str, length, pad_str) - 示例:
LPAD('123', 5, '0') → '00123' ;LPAD('abcdef', 4, 'x') → 'abcd'
38、RPAD():在字符串右侧用指定字符填充,规则同LPAD。 - 语法:
RPAD(str, length, pad_str) - 示例:
RPAD('ID', 5, '0') → 'ID000'
十二、其他字符串函数39、REPEAT():将字符串重复n次。 - 示例:
REPEAT('ab', 3) → 'ababab'
40、REVERSE():反转字符串。 - 示例:
REVERSE('abc') → 'cba' ;REVERSE('reverse') → 'esrever'
41、STRCMP():比较两个字符串(相等返回0,str1>str2返回1,否则返回-1)。 - 示例:
STRCMP('abc', 'abd') → -1
42、FORMAT():将数字格式化为带千分位的字符串,并保留指定小数位数。 - 语法:
FORMAT(number, decimal_places) - 示例:
FORMAT(1234567.89, 2) → '1,234,567.89'
43、UNHEX():将十六进制字符串转换为二进制字符串(反向为HEX函数)。 - 示例:
UNHEX('48656C6C6F') → 'Hello'
44、GET_JSON_OBJECT()(Hive支持):从JSON字符串中提取指定路径的值。 - 语法:
GET_JSON_OBJECT(json_str, '$.path') - 示例:
GET_JSON_OBJECT('{"name":"Alice", "age":25}', '$.name') → 'Alice'
45、COLLECT_SET + CONCAT_WS()(Hive聚合拼接):将分组内的列值去重后,用sep拼接成字符串(常用于“列转行”)。 - 语法:
CONCAT_WS(sep, COLLECT_SET(column)) - 示例:若表
student 有数据(1, 'math'), (1, 'english'), (2, 'math') ,则SELECT id, CONCAT_WS(';', COLLECT_SET(subject)) AS subjects FROM student GROUP BY id → 结果:(1, 'math;english'), (2, 'math')
以上 SQL 字符串处理函数,从简单的空格清理到复杂的正则提取、JSON 解析,每一类函数都有其独特价值。不同数据库对函数的支持存在细微差异(如 Hive 的GET_JSON_OBJECT、PostgreSQL 的REGEXP_SPLIT_TO_TABLE),实际使用时需结合具体场景和数据库特性选择。掌握这些函数不仅能简化数据清洗流程,更能解锁复杂文本分析的可能性。
阅读原文:原文链接
该文章在 2025/9/1 12:18:58 编辑过
|
|