MySQL 字符串函数

一、函数分类

字符串函数的分类

二、具体方法

类型函数名描述
字符串截取
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
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值