03 cast和substring函数的使用-从身份证号取生日
03 cast和substring函数的使用-从身份证号取生日
01 背景
类型格式转换。取出身份证中的生日并转成指定格式。
学生表,表结构如下
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`stu_id` int(11) NOT NULL,
`stu_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生姓名',
`alias` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '别名',
`id_num` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '身份证号',
`cls_id` int(11) NULL DEFAULT NULL COMMENT '班级ID',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
数据内容如下
INSERT INTO `student`(`id`, `stu_id`, `stu_name`, `alias`, `id_num`, `cls_id`) VALUES (1, 1001, '赵云', '', '330105200503111627', 1);
INSERT INTO `student`(`id`, `stu_id`, `stu_name`, `alias`, `id_num`, `cls_id`) VALUES (2, 1002, '张飞', NULL, '12022519980527003X', 1);
INSERT INTO `student`(`id`, `stu_id`, `stu_name`, `alias`, `id_num`, `cls_id`) VALUES (3, 1003, '关羽', '美髯公', '460102200506050313', 1);
INSERT INTO `student`(`id`, `stu_id`, `stu_name`, `alias`, `id_num`, `cls_id`) VALUES (4, 2001, '司马懿', NULL, '330106201406200012', 2);
INSERT INTO `student`(`id`, `stu_id`, `stu_name`, `alias`, `id_num`, `cls_id`) VALUES (5, 2002, '夏侯惇', NULL, '330105200501272822', 2);
2 需求
从每个学生的身份证号中得到学生的生日,并用-
连接显示
- 取身份证号
- 转换成日期
- 日期用
-
连接
3 操作
3.1 substring函数
substring
函数从特定位置开始返回一个子字符串的功能。大体上有两种形式。
- substring(string,position) 从给定位置开始返回后面的子字符串
- substring(string,position,lenth) 从给定位置开始返回指定长度的子字符串
⚠️ 如果 position
是0
,则返回一个空字符串。
SELECT
stu_name,
id_num,
substring( id_num, 7, 8 ) as birthday
FROM
student
3.2 使用cast函数进行格式转换
cast
函数格式为cast(字段名 as 转换的类型)
,其中类型可以为:
- char 字符型
- date 日期型
- datetime 日期和时间型
- decimal float型
- signed int型
- time 时间型
知行合一