一、函数分类
二、具体方法
类型 | 函数名 | 描述 |
---|---|---|
字符串截取 | ||
left(str,n) | 返回字符串 str 的前 n 个字符 | |
right(str,n) | 返回字符串 str 的后 n 个字符 | |
mid(str,start,length) | 从字符串 str 第 start 个位置截取长度为 length 的子字符串 | |
substr(str, start,length) | 从字符串 str 第 start 个位置截取长度为 length 的子字符串 | |
substring(str, start, length) | 从字符串 str 第 start 个位置截取长度为 length 的子字符串 | |
substring_index(str, delimiter, number) | 返回从字符串 s 的第 number 个出现的分隔符 delimiter 之后的子串。 如果 number 是正数,返回第 number 个字符左边的字符串。 如果 number 是负数,返回第(number 的绝对值(从右边数))个字符右边的字符串 | |
合并/添加字符串 | ||
concat(str1,str2...strn) | 字符串 str1,str2 等多个字符串合并为一个字符串 | |
concat_ws(delimiter, str1,str2...strn) | 同 concat(str1,str2,...) 函数,但是每个字符串之间要加上分隔符 delimiter | |
lpad(str1,length,str2) | 在字符串 str1 的开始处填充字符串 str2,使字符串长度达到 length | |
rpad(str1,length,str2) | 在字符串 str1 的结尾处添加字符串 str2,使字符串的长度达到 length | |
字符串长度 | ||
length(str) | 返回字符串 str 的字节长度,区别于char_length(str) | |
char_length(str)或character_length(str) | 返回字符串 str 的字符 | |
大小写转换 | ||
lcase(str) | 将字符串 str 的所有字母变成小写字母 | |
lower(str) | 将字符串 str 的所有字母变成小写字母 | |
ucase(str) | 将字符串转换为大写 | |
upper(str) | 将字符串转换为大写 | |
替换字符串 | ||
insert(str1,start,length,str2) | 字符串 str2 替换 str1 从 start 位置开始计算长度为 length 的字符串 | |
replace(str,str1,str2) | 将字符串 str2 替代字符串 str 中的字符串 str1 | |
获取字符位置 | ||
locate(str1,str) | 从字符串 str 中获取 str1 的开始位置 | |
position(str1 in str) | 从字符串 str 中获取 str1 的开始位置 | |
field(str,str1,str2...) | 返回第一个字符串 str 在字符串列表(str1,str2...)中的位置 | |
find_in_set(str1,str) | 从字符串 str 中获取 str1 的开始位置 | |
空格函数 | ||
ltrim(str) | 去掉字符串 str 开始处的空格 | |
rtrim(str) | 去掉字符串 str 结尾处的空格 | |
trim(str) | 去掉字符串 str 开始和结尾处的空格 | |
replace(' ',str,'') | 去掉字符串 str 里面所有的空格 | |
space(n) | 返回 n 个空格 | |
特殊函数 | ||
repeat(str,n) | 将字符串 str 重复 n 次 | |
reverse(str) | 将字符串 str 的顺序反过来 | |
strcmp(str1,str2) | 比较字符串 str1 和 str2。 如果 str1 与 str2 相等返回 0 。 如果 str1 > str2 返回 1,如果 str1 < str2 返回 -1 | |
ASCII(str) | 返回字符串 str 的第一个字符的 ASCII 码 |
二、实例
(1)字符串截取
select
#返回字符串 student 中的前3个字符:
left('student',3), #stu
#返回字符串 student 的后两个字符:
right('student',3), #ent
#从字符串 'student' 中的第 2 个位置开始截取 3个 字符:
mid('student', 2, 3), #tud
substr('student', 2, 3), #tud
substring('student', 2, 3), #tud
#如果 number 是正数,返回正数第 number 个分隔符左边的字符串
substring_index('student,学生,12',',',1), #student
substring_index('student,学生,12',',',2), #student,学生
#如果 number 是负数,返回倒数第(绝对值number)个分隔符右边的字符串。
substring_index('student,学生,12',',',-1), #12
substring_index('student,学生,12',',',-2), #学生,12
substring_index(substring_index('student,学生,12',',',-2),',',1) #学生
#输出结果:stu|end|tud|tud|tud|student|student,学生|12|学生,12|学生
注意:
三种字符串截取方式,一是截取字符串前(后)几个字符、二是按照字符串长度截取,三是按照分隔符截取
(2)合并、添加字符串
select
#合并多个字符串
concat('student', '学生', 12, '!'), #student学生12!
#合并多个字符串,并添加分隔符:
concat_ws('+', 'student', '学生', 12, '!'), #student+学生+12+!
#将字符串 'student' 填充到 '学生' 字符串的开始处,最终保留5各字符:
lpad('学生',5,'student'), #stu学生
#将字符串 'student' 填充到 '学生' 字符串的结尾处,最终保留5各字符:
rpad('学生',5,'student') #学生stu
#输出结果:student学生12!|student+学生+12+!|stu学生|学生stu
(3)字符串的长度
select
#返回字符串 'student学生' 的字节数
length('student学生'), #13
#返回字符串 'student学生' 的字符数
char_length('student学生'), #9
#返回字符串 'student学生' 的字符数
character_length('student学生') #9
#输出结果:13|9|9
注意: length(str) 和 char_length(str) 的区别
函数 特点 char_length(str) 1、单位为字符
2、不管汉字还是数字或者是字母都算是一个字符length(str) 1、字节,utf8编码下,一个汉字三个字节,一个数字或字母一个字节。
2、gbk下,一个汉字两个字节,一个数字或字母一个字节。length()<>char_length()可以用来检验是否含有中文字符
(4)大小写转换
select
#字符串 STUDENT 转换为小写:
lcase('STUDENT'), #student
lower('STUDENT'), #student
lower('StUdeNT'), #student
#将字符串 student 转换为大写:
ucase('student'), #STUDENT
upper('student'), #STUDENT
upper('StUdeNT') #STUDENT
#输出结果:student|student|student|STUDENT|STUDENT|STUDENT
(5)替换字符串
select
#字符串 student 从 1 到 6 的字符替换为 学生:
insert('student', 1, 6, '学生'), #学生t
#将字符串 student 中的字符 stu 替换为字符 学生:
replace('student', 'stu','学生') #学生dent
#输出结果:学生t|学生dent
注意:
替换字符串分为两种方式,一是替换指定字符,二是替换指定位置的字符。
(6)获取字符位置
select
#返回字符串 t 在列表值中第一次出现的位置:
field('s', 's','t','u','d','e','n','t'), #1
field('T', 's','t','u','d','e','n','t'), #1
#返回字符串 t 在指定字符串 student 中第一次出现的位置:
find_in_set('t','student'), #0
find_in_set('T','student'), #0
#返回字符串 t 在指定字符串 student 中第一次出现的位置:
locate('t','student'), #2
locate('T','student'), #2
#返回字符串 t 在指定字符串 student 中第一次出现的位置:
position('t' in 'student'), #2
position('T' in 'student'), #2
position(' ' in 'stu dent'), #4
position('q' in 'student') #0
#输出结果:1|1|0|0|2|2|2|2|4|0
注意:
1、只能返回第一次出现的位置;
2、对大小写不敏感;
3、若字符在字符串中不存在,返回0;
4、以上几种函数语法不一样,但是实际功能一样。
(7)空格函数
select
#去掉字符串 student 开始处的空格:
ltrim(' student'), #student
#去掉字符串 student 末尾处的空格:
rtrim('student '), #student
#去掉字符串 student 的首尾空格:
trim(' stud ent '), #stud ent
#去掉字符串 student 的所有空格:
replace(' stud ent ',' ',''), #student
#返回 10 个空格:
space(10) #
#输出结果:student|student|stud ent|student|
注意:
除了使用trim函数还可以使用replace函数,采用替换的方式去掉空格,只不过replace函数会去掉所有空格,trim只去首尾空格。
(8)特殊函数
select
#将字符串 student 重复三次:
repeat('student',3), #studentstudentstudent
#将字符串 student 的顺序反过来:
reverse('student'), #tneduts
#比较字符串:
strcmp('student','s'), #1
strcmp('student','student'), #0
#返回 student 字段第一个字母的 ASCII 码:
ASCII('student') #115
#输出结果:studentstudentstudent|tneduts|-1|1|115