字符函数

5.2 字符函数

concat 拼接、substring 截取、length 长度、upper/lower 大小写、trim 去空格。

第5章 SQL 内置函数函数11 页课件1 个知识点

本讲导览

核心内容

第2节

字符函数

1. ASCII(字符)

返回字符的ASCII码, select ASCII('A') 结果:65

2. Char(数值)

返回该数值对应的字符, select char(65) A

3. Space(n)

返回n个空格, Select space(10)

4. Length(字符串)

MYSQL中返回数据库字符集编码下字符串中的字节个数。

如:在字符集utf8mb4下,

(1)Select length(‘1234’); 返回4

因为在字符集utf8mb4中1个数字或英文字母只占1个字节。

(2)select length(‘青岛’); 返回6

因为在字符集utf8mb4中1个汉字占3个字节。

5、char_length(字符串)

返回字符串中的字符个数。不受数据库字符集的影响。

SQL
select char_length(‘青岛1a’); 返回4

说明:此函数对字符串中的空格也计算。

注意:mysql中有几种获取字符串长度的函数,只有char_length()返回的是字符个数,而不是字节数。

其它几个函数都返回的是字节个数,而不是字符个数。

6. 返回字符串中的子串

(1)从左边取

SQL
Left(字符串, n)
Select left('青岛港湾职业技术学院',2)

结果:青岛

显示姓‘王’的同学:

SQL
SELECT * FROM STUDENT where StuName like '王%'

结果等价于:

SQL
SELECT * FROM STUDENT where left(StuName,1)='王'

(2)从右边取

SQL
right(字符串, n)
Select right('青岛港湾职业技术学院',2)

结果:学院

名字中最后一个字是‘丽’的同学,也可以写成:

SQL
SELECT * FROM STUDENT where right(StuName,1)='丽'

(3)任意取

SQL
Substring(字符串,m,n) 或写成substr(字符串,m,n)

返回字符串从m位置开始的n个字符。(不受字符集的影响)

SQL
Select substring('青岛港湾职业技术学院',3,2)

结果:港湾

(1)请用substring()函数,显示姓‘王’的同学

SQL
SELECT * FROM STUDENT where substring(StuName,1,1)='王'

(2)请用substring()函数,显示第2个字是‘丽’的同学

(3)请用substring()函数,显示第3个字是‘丽’的同学

7、 去掉前导空格

SQL
Ltrim( ), L是左侧的意思, left
update student set stuname=ltrim(stuname)

8、 去掉后边空格

Rtrim(), R是右侧的意思, right

SQL
update student set stuname=rtrim(stuname)

前后都去掉空格:rtrim(ltrim(stuname ))

SQL
select rtrim(ltrim(' 青岛港湾 '))

或者用trim(),也是前后都去空格。

9、 替换函数

SQL
Replace(字符串1,字符串2,字符串3)

用字符串3替换字符串1中的字符串2,返回一个新的字符串

如:select replace('青岛港学院' ,'港' ,'港湾') ‘青岛港湾学院’

把名字中的‘丽’都换成‘莉’

SQL
update student set stuname=replace(stuname,'丽','莉') where stuname like '%丽%'

能不能再替换回来? 即将‘莉’再换成‘丽’,如何写语句?

SQL
update student set stuname=replace(stuname,'莉','丽') where stuname like '%莉%'

请将密码中(pwd)的A都改为a, 语句怎么写?

把名字前加上‘中国’?

SQL
update student set stuname=concat('中国',rtrim(StuName));

再把名字中的‘中国’去掉?

SQL
update student set stuname=replace(stuname,'中国','') where stuname like '%中国%‘

思考:如何去掉字符串中间的空格?

10、字母大写转换成小写

SQL
Lower()
Select lower('ABCD') abcd

11. 字母小写转换成大写

SQL
Upper()
select UPPER('abcd') ABCD
update Student set pwd=LOWER(pwd)

12、类型转换函数

Cast(原数据 as 新类型)

CAST函数 是 SQL 中的一种类型转换函数,它用于将一个数据类型转换为另一个数据类型。

SQL
select concat(CAST(123 AS char),'456');

结果:123456

13、字符串连接函数

SQL
Concat(‘字符串1’,’字符串2’)

将‘字符串2’连接到‘字符串1’之后,生成新的字符串。

SQL
select concat('123','456');
📄 展开课件原文(第 1–11 页,共 11 页)
第 1 页

第2节、字符函数

1. ASCII(字符)

返回字符的ASCII码, select ASCII('A') 结果:65

2. Char(数值)

返回该数值对应的字符, select char(65) A

3. Space(n)

返回n个空格, Select space(10)

第 2 页

4. Length(字符串)

MYSQL中返回数据库字符集编码下字符串中的字节个数。

如:在字符集utf8mb4下,

(1)Select length(‘1234’); 返回4

因为在字符集utf8mb4中1个数字或英文字母只占1个字节。

(2)select length(‘青岛’); 返回6

因为在字符集utf8mb4中1个汉字占3个字节。

第 3 页

5、char_length(字符串)

返回字符串中的字符个数。不受数据库字符集的影响。

select char_length(‘青岛1a’); 返回4

说明:此函数对字符串中的空格也计算。

注意:mysql中有几种获取字符串长度的函数,只有char_length()返回的是字符个数,而不是字节数。

其它几个函数都返回的是字节个数,而不是字符个数。

第 4 页

6. 返回字符串中的子串

(1)从左边取

Left(字符串, n)

Select left('青岛港湾职业技术学院',2)

结果:青岛

显示姓‘王’的同学:

SELECT * FROM STUDENT where StuName like '王%'

结果等价于:

SELECT * FROM STUDENT where left(StuName,1)='王'

第 5 页

(2)从右边取

right(字符串, n)

Select right('青岛港湾职业技术学院',2)

结果:学院

名字中最后一个字是‘丽’的同学,也可以写成:

SELECT * FROM STUDENT where right(StuName,1)='丽'

第 6 页

(3)任意取

Substring(字符串,m,n) 或写成substr(字符串,m,n)

返回字符串从m位置开始的n个字符。(不受字符集的影响)

Select substring('青岛港湾职业技术学院',3,2)

结果:港湾

(1)请用substring()函数,显示姓‘王’的同学

SELECT * FROM STUDENT where substring(StuName,1,1)='王'

(2)请用substring()函数,显示第2个字是‘丽’的同学

(3)请用substring()函数,显示第3个字是‘丽’的同学

第 7 页

7、 去掉前导空格

Ltrim( ), L是左侧的意思, left

update student set stuname=ltrim(stuname)

8、 去掉后边空格

Rtrim(), R是右侧的意思, right

update student set stuname=rtrim(stuname)

前后都去掉空格:rtrim(ltrim(stuname ))

select rtrim(ltrim(' 青岛港湾 '))

或者用trim(),也是前后都去空格。

第 8 页

9、 替换函数

Replace(字符串1,字符串2,字符串3)

用字符串3替换字符串1中的字符串2,返回一个新的字符串

如:select replace('青岛港学院' ,'港' ,'港湾') ‘青岛港湾学院’

把名字中的‘丽’都换成‘莉’

update student set stuname=replace(stuname,'丽','莉') where stuname like '%丽%'

能不能再替换回来? 即将‘莉’再换成‘丽’,如何写语句?

第 9 页

update student set stuname=replace(stuname,'莉','丽') where stuname like '%莉%'

请将密码中(pwd)的A都改为a, 语句怎么写?

把名字前加上‘中国’?

update student set stuname=concat('中国',rtrim(StuName));

再把名字中的‘中国’去掉?

update student set stuname=replace(stuname,'中国','') where stuname like '%中国%‘

思考:如何去掉字符串中间的空格?

第 10 页

10、字母大写转换成小写

Lower()

Select lower('ABCD') abcd

11. 字母小写转换成大写

Upper()

select UPPER('abcd') ABCD

update Student set pwd=LOWER(pwd)

第 11 页

12、类型转换函数

Cast(原数据 as 新类型)

CAST函数 是 SQL 中的一种类型转换函数,它用于将一个数据类型转换为另一个数据类型。

select concat(CAST(123 AS char),'456');

结果:123456

13、字符串连接函数

Concat(‘字符串1’,’字符串2’)

将‘字符串2’连接到‘字符串1’之后,生成新的字符串。

select concat('123','456');

课件里的提醒 课件原文中的“说明 / 注意 / 出错”

  • 说明:此函数对字符串中的空格也计算。
  • 注意:mysql中有几种获取字符串长度的函数,只有char_length()返回的是字符个数,而不是字节数。

本讲 SQL 速览 把课件里出现的语句集中起来,方便照着敲

SQL
select char_length(‘青岛1a’); 返回4
SQL
Left(字符串, n)
SQL
Select left('青岛港湾职业技术学院',2)
SQL
SELECT * FROM STUDENT where StuName like '王%'
SQL
SELECT * FROM STUDENT where left(StuName,1)='王'
SQL
right(字符串, n)
SQL
Select right('青岛港湾职业技术学院',2)
SQL
SELECT * FROM STUDENT where right(StuName,1)='丽'
SQL
Substring(字符串,m,n) 或写成substr(字符串,m,n)
SQL
Select substring('青岛港湾职业技术学院',3,2)
SQL
SELECT * FROM STUDENT where substring(StuName,1,1)='王'
SQL
Ltrim( ), L是左侧的意思, left