函数-1-字符串函数
字符串函数
函数
函数是一段可以直接被另一端程序调用的程序或代码
语法
sql
SELECT 函数名(参数名)
大家可能会有那么一点点疑惑, 为什么执行函数还需要加上SELECT
语句? 总结一下, 因为SELECT
语句是MySQL
中执行函数并获取结果的标准方式,它能够方便地与其他SQL操作结合,并以简洁的语法完成各种计算和数据处理任务。
字符串函数的使用
MySQL中内置了很多字符串函数, 常用的几个如下:
函数 | 功能 |
---|---|
CONCAT(S1, S2, ..., Sn) | 字符串拼接, 将 S1, S2, ..., Sn 拼接成一个字符串 |
LOWER(str) | 将字符串 str 全部转为小写 |
UPPER(str) | 将字符串 str 全部转为大写 |
LPAD(str, n, pad) | 左填充, 用字符串 pad 对 str 的左边进行填充, 达到 n 个字符串长度 |
RPAD(str, n, pad) | 右填充, 用字符串 pad 对 str 的右边进行填充, 达到 n 个字符串长度 |
TRIM(str) | 去掉字符串头部和尾部的空格 |
SUBSTRING(str, start, len) | 返回字符串 str 从 start 位置起的 len 个长度的字符串 |
字符串函数语法
-
CONCAT
函数sqlSELECT CONCAT(参数)
-
LOWER
函数sqlSELECT LOWER(参数)
-
UPPER
函数sqlSELECT UPPER(参数)
-
LPAD
函数sqlSELECT LPAD(参数)
-
RPAD 函数
sqlSELECT RPAD(参数)
-
TRIM 函数
sqlSELECT TRIM(参数)
案例演示
-
拼接
Hello
和World
两个字符串sqlselect concat('Hello', 'World');
-
将
Hello, World
字符串所有字母转换成小写字母sqlselect lower('Hello, World');
-
将
Hello, World
字符串所有字母转换成大写字母sqlselect upper('Hello, World');
-
使用
@
符号对字符串Hello, World
进行左填充 ,使其总长度达到20
个字符sqlselect lpad('Hello, World', 20, '@');
-
使用
@
符号对字符串Hello, World
进行右填充 ,使其总长度达到20
个字符sqlselect rpad('Hello, World', 20, '@');
-
去除字符串
Hello, World
首尾的空格sqlselect trim(' Hello, World ');
-
从字符串
Hello, World
中提取子串,得到llo, Wor
sqlselect substring('Hello, World', 3, 8);
注意, 此处的起始索引是从
1
开始算的, 所以需要注意我们切片的时候的起始索引应该是3
, 而不是2
实战练习
首先我们需要准备一下数据, 在 test
库的 emp_info
中更新一下数据, 进行如下替换即可
sql
INSERT INTO emp_info (id, work_no, name, gender, age, id_card, work_address, entry_time)
VALUES (1, '1', '张伟', '男', 28, '11010519950101234X', '北京市海淀区中关村科技园', '2020-03-15'),
(2, '2', '李娜', '女', 32, '310115199209076542', '上海市浦东新区张江高科技园区', '2019-07-22'),
(3, '3', '王超', '男', 25, '440305199801129876', '深圳市南山区高新科技园', '2021-11-05'),
(4, '4', '赵敏', '女', 29, '510107199412258765', '成都市高新区天府软件园', '2020-09-18'),
(5, '5', '陈阳', '男', 35, '330106198911034567', '杭州市西湖区云栖小镇', '2018-05-30'),
(6, '6', '刘婷', '女', 27, '320506199612127890', '苏州市工业园区人工智能产业园', '2022-02-14'),
(7, '7', '杨帆', '男', 31, '420111199211156789', '武汉市东湖新技术开发区', '2019-10-21'),
(8, '8', '周雨', '女', 26, '440111199712098765', '广州市天河区智慧城', '2021-08-03'),
(9, '9', '吴强', '男', 33, '500106198912312345', '重庆市渝北区仙桃数据谷', '2017-04-12'),
(10, '10', '郑琳', '女', 30, '610113199310214567', '西安市高新区软件新城', '2020-01-25');
-
由于业务需求变更, 企业员工的工号, 统一为
5
位数, 目前不足5
位数的全部在前面补0
, 例如: 1 号员工的公号应该为00001
这题其实不是很复杂, 但咱可以稍微搞复杂一些, 顺便回顾一下之前的知识点
首先查看一下建表语句, 获取一下各字段信息
sqldesc emp_info;
查看到表结构, 我们需要统一的企业员工的工号字段为
work_no
, 类型为varchar(10)
再查看一下表内容
sqlselect * from emp_info;
这里其实可以发现,
work_no
字段都不足5
位数, 但是字段类型却为varchar(10)
, 所以我们可以尝试修改以下表的结构, 将其统一为char(5)
, 当然只作练习使用, 不适用于生产环境, 生产环境还是得因地制宜, 按照企业的意思进行管理, 这里只做学习!!!修改
work_no
字段类型为char(5)
sqlalter table emp_info modify work_no char(5);
再次查看表结构以确认修改结果
使用左补全, 补全员工工号字段, 并且更新到表中, 这里其实大家就能明白, 使用函数不一定要带有
SELECT
sqlupdate emp_info set work_no=lpad(emp_info.work_no, 5, '0');