(七)字符串处理函数
| 常用函数 | 基本功能 |
|---|---|
| LOWER,LCASE,UPPER | 转换字母大小写 |
| REPLACE | 替换字符串中指定的字符串 |
| ASCII | 取ASCII码 |
| CONCAT 或 || | 字符串连接 |
| SUBSTRING,LEFT,RIGHT | 字符串截取 |
| INSTR | 取字符串位置 |
| NVL | 替换NULL值 |
| TRIM,LTRIM,RTRIM | 去除字符串中空格 |
| LENGTH ,CHAR_LENGTH | 取字符串长度 |
1、LOWER, LCASE:全部字母转换为小写;UPPER, UCASE:全部字母转换为大写
| 函数调用 | 返回值 |
|---|---|
| UPPER(‘gb’) || LOWER(‘ASE’) || LCASE(’ 8A’) | GBase 8a |
2、REPLACE(String,fromStr,toStr) :替换字符串中指定的字符串
| 函数调用 | 返回值 |
|---|---|
| REPLACE(‘1234567’,‘23’,‘AB’) | 1AB4567 |
小贴士:REPLACE 第一个参数通常是一个字符型字段,执行 REPLACE 操作后,该字段的值是不会变化的。
3、ASCII
功能:返回字符串首字符的ASCII码值
| 函数调用 | 返回值 | 解释 |
|---|---|---|
| ASCII(‘A’) | 65 | |
| ASCII(‘Abc’) | 65 | 多个字符只取第一个 |
| ASCII(NULL) | NULL | 空指针做参数不会报错 |
4、CHAR
功能:返回ASCII码值对应的字符组成的字符串,忽略 NULL
| 函数调用 | 返回值 | 解释 |
|---|---|---|
| CHAR(65, 66, NULL, 67) | ABC | NULL 被忽略了 |
5、CONCAT 或 ||
功能:字符串连接,可将将数字隐形转换为字符串。
select CONCAT('GBASE公司', ceiling(datediff(now(), '2004-5-1')/365), '岁了') as RESULT;
| RESULT |
|---|
| GBASE公司19岁了 |
GBASE公司成立于2004-5-1,今天是2022-6-9,年头超过18年,由于ceiling是天花板整除函数,所以,最后的结果是19。
6、GROUP_CONCAT (<列名> separator <分隔符>)
功能:同一分组内聚集列字符串进行连接。
测试表 student Sname 列数据如下——
| Sname |
|---|
| 刘备 |
| 孙权 |
| 曹操 |
| 张辽 |
| 貂蝉 |
| 小乔 |
| 大乔 |
| 关羽 |
| 周瑜 |
| 张飞 |
| 陆逊 |
执行以下 SQL
select GROUP_CONCAT(Sname separator '\\') RESULT from student
| RESULT |
|---|
| 关羽\刘备\周瑜\大乔\孙权\小乔\张辽\张飞\曹操\貂蝉\陆逊 |
小贴士:
1、分隔符是“\”,需要转义,即"\\"。
2、如果拼接后的字串超过 1024 个字节,SQL 将报错聚集数据越界的错误。此时可以考虑将系统参数 group_concat_max_len 放大一些。其默认值1024,最大32767。
3、GROUP_CONCAT 不能和 Order By 子句一起使用。
7、SUBSTRING_INDEX (<原始字符串>, ‘<分隔符>’, N)
功能:以指定分隔符将原始字符串分隔为子字符串序列,从第一个子字符串取到第 N 个子字符串。
| 函数调用 | 返回值 | 解释 |
|---|---|---|
| substring_index(‘www.baidu.com’, ‘.’, 2) | www.baidu | www.baidu.com 以 “.” 分割为 www、baidu、com 三个子字符串,取前两个子字符串然后再用分隔符连接起来 |
| substring_index(‘www.baidu.com’, ‘.’, 0) | 返回空串 |
小贴士:如果原始分隔符在字符串中不存在,则原始字符串只能是一个子字符串,只要 N > 0 该函数的返回值都是原始字串。
8、INSTR (源字符串,查找字符串,起始位置,第n次出现)
功能:返回查找字符串位置。查找到的位置索引从 1 开始。
| 函数调用 | 返回值 | 解释 |
|---|---|---|
| INSTR(‘wwerw.gbase.cerom’,‘er’) | 3 | |
| INSTR(‘wwerw.gbase.cerom’,‘er’,1,2) | 14 |
9、NVL (<字符串>,replace_with)
功能:若第一个参数是 NULL,函数返回 replace_with。
select cID, cName, nvl(cpno,'unknown') as CPNo from subject;
| cID | cName | CPNo |
|---|---|---|
| 1 | 数据库 | 5 |
| 2 | 数学 | unknown |
| 3 | 信息系统 | 1 |
| 4 | 操作系统 | 6 |
| 5 | 数据结构 | 7 |
| 6 | 数据处理 | unknown |
| 7 | Python语言 | 6 |
nvl 函数替换 cpno 列中 NULL 值为 “unknown” 字串。
10、LEFT / RIGHT
功能:从左/右截取指定位数的字符串。
下面的例子是数字格式化,统一成四位,不足四位左补零。
| 函数调用 | 返回值 | 解释 |
|---|---|---|
| RIGHT(concat(repeat(‘0’, 4), 12),4) | 0012 |
11、LENGTH(<字符串>):返回字节长度。
CHAR_LENGTH(<字符串>):返回字符长度。。
CHARACTER_LENGTH(<字符串>):返回字符长度。
GBase 8a 默认安装时字符集是UTF8,一个汉字占3个字节。
| 函数调用 | 返回值 | 解释 |
|---|---|---|
| LENGTH('南大通用GBase ') | 17 | 3个汉字和5个字母 |
| CHAR_LENGTH(‘南大通用GBase’); | 9 | 一个汉字都是一个字符 |
12、TRIM( [{BOTH | LEADING | TRAILING} [trim_char] FROM] <字符串> )
功能:移除<字符串>中所有的 trim_char 前缀或后缀。如果没有给出任何 BOTH、LEADING 或 TRAILING 修饰符,默认BOTH。如果没有指定 trim_char,将移除空格。
| 函数调用 | 返回值 | 解释 |
|---|---|---|
| TRIM(TRAILING ‘.pptx’ from ‘GBase 8a 集群核心技术.pptx’) | GBase 8a 集群核心技术 | 去掉 File Name 的扩展名 |




