MySQL单行函数
字符函数
1. 字符串拼接
concat(str1,str2,...):将str1,str2...等多个字符串拼接成一个长字符串,如果有任何一个参数为NULL,则返回值为NULL
concat_ws(separator, str1, str2, ...):指定分隔符,将多个字符串拼接成一个长字符串,如果有任何一个参数(包括分隔符)为NULL,则返回值为NULL
group_concat(distinct 要连接的字段 order by 排序字段 separator '分隔符'):搭配group by使用,将分组后产生的,属于同一个分组中的值连接起来,返回一个长字符串结果(f分隔符默认为逗号)
# 准备测试数据 --student表
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT, #--id
`stuName` varchar(22) DEFAULT NULL, #--学生姓名
`course` varchar(22) DEFAULT NULL, #--学习科目
`score` int(11) DEFAULT NULL, #--学分
PRIMARY KEY (`id`) #--设置主键
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
# 插入数据
INSERT INTO `student`(stuName,course,score) VALUES ('张三', '语文', '91');
INSERT INTO `student`(stuName,course,score) VALUES ('张三', '数学', '90');
INSERT INTO `student`(stuName,course,score) VALUES ('张三', '英语', '87');
INSERT INTO `student`(stuName,course,score) VALUES ('李四', '语文', '79');
INSERT INTO `student`(stuName,course,score) VALUES ('李四', '数学', '95');
INSERT INTO `student`(stuName,course,score) VALUES ('李四', '英语', '80');
INSERT INTO `student`(stuName,course,score) VALUES ('王五', '语文', '77');
INSERT INTO `student`(stuName,course,score) VALUES ('王五', '数学', '81');
INSERT INTO `student`(stuName,course,score) VALUES ('王五', '英语', '89');
# 浏览数据
mysql> select * from student;
+----+---------+--------+-------+
| id | stuName | course | score |
+----+---------+--------+-------+
| 10 | 张三 | 语文 | 91 |
| 11 | 张三 | 数学 | 90 |
| 12 | 张三 | 英语 | 87 |
| 13 | 李四 | 语文 | 79 |
| 14 | 李四 | 数学 | 95 |
| 15 | 李四 | 英语 | 80 |
| 16 | 王五 | 语文 | 77 |
| 17 | 王五 | 数学 | 81 |
| 18 | 王五 | 英语 | 89 |
+----+---------+------- +-------+
# concat_ws()函数和group_concat()搭配使用
select
stuName as ‘姓名’,group_concat(concat_ws(':',course,score) order by score separator ',') as '成绩'
from student
group by stuName;
# 查询返回结果
+--------------+-------------------------------+
| ‘姓名’ | 成绩 |
+--------------+-------------------------------+
| 张三 | 英语:87,数学:90,语文:91 |
| 李四 | 语文:79,英语:80,数学:95 |
| 王五 | 语文:77,数学:81,英语:89 |
+--------------+-------------------------------+
2. 字符串替换
insert(str,x,y,instr):将字符串 str 从第 x 位置开始,y 个字符长的子串替换为字符串instr
replace(str,x,y): 将字符串str中的x替换成y
mysql> select insert('aaaaab',2,5,1),replace('aaaaab','a',1);
+------------------------+-------------------------+
| insert('aaaaab',2,5,1) | replace('aaaaab','a',1) |
+------------------------+-------------------------+
| a1 | 11111b |
+------------------------+-------------------------+
3. 字符串填充
lpad(str,x,instr):向字符串str的最左侧填充字符串instr,直到字符串长度达到x
rpad(str,x,instr):向字符串str的最右端填充字符串instr,直到字符串长度达到x
如果当原字符串的长度>给定的填充后的字符串长度,返回结果则是从左往右取x位字符
mysql> select lpad('aa',6,'b'),rpad('aa',6,'b'),lpad('aaaaaa',2,'b'),rpad('aaaaaa',2,'b');
+------------------+------------------+----------------------+----------------------+
| lpad('aa',6,'b') | rpad('aa',6,'b') | lpad('aaaaaa',2,'b') | rpad('aaaaaa',2,'b') |
+------------------+------------------+----------------------+----------------------+
| bbbbaa | aabbbb | aa | aa |
+------------------+------------------+----------------------+----------------------+
4. 字符串去空格/字符
trim(leading/trailing/both instr from str):去除字符串str最左端/最右端/两端的字符串instr,或者空格
ltrim(str):去除字符串左端空格
rtrim(str):去除字符串右端空格
mysql> select trim(leading 'a' from 'abca'),trim(leading 'ab' from 'abca'); +-------------------------------+--------------------------------+ | trim(leading 'a' from 'abca') | trim(leading 'ab' from 'abca') | +-------------------------------+--------------------------------+ | bca | ca | +-------------------------------+--------------------------------+
5. 返回字符串的最左/右端字符串
left(str,x):返回字符串str最左端x个字符
right(str,x):返回字符串str最右端x个字符
mysql> select left('abc',1),right('abc',1);
+---------------+----------------+
| left('abc',1) | right('abc',1) |
+---------------+----------------+
| a | c |
+---------------+----------------+
6. 截取字符串
substring(str,x,y):截取字符串str,从x开始,截取y位
mysql> select substring('abcdef',2,3):
+-------------------------+
| substring('abcdef',2,3) |
+-------------------------+
| bcd |
+-------------------------+
7. 查找字符串位置
instr(str,instr):查找字符串instr第一次出现的位置
locate(instr,str,pos):从pos开始查找字符串instr第一次出现的位置
position(instr in str):查找字符串str第一次出现的位置
mysql> select instr('abc','b'),locate('b','abc',1),position('b' in 'abc');
+------------------+---------------------+------------------------+
| instr('abc','b') | locate('b','abc',1) | position('b' in 'abc') |
+------------------+---------------------+------------------------+
| 2 | 2 | 2 |
+------------------+---------------------+------------------------+
8. 返回字符串的字符长度/字节长度
length(str):返回字符串str的字节长度。不同的字符集编码下,字符和字节的对应关系不同,在utf8规则下,一个汉字字符 =3 个字节,gbk:一个汉字字符 = 2个字节。
char_length(str):返回字符串str的字符长度。一个汉字,数字,字母或者符号就是一个字符
# 字符集编码为utf8
mysql> select length('数据库'),char_length('数据库');
+---------------------+--------------------------+
| length('数据库') | char_length('数据库') |
+---------------------+--------------------------+
| 9 | 3 |
+---------------------+--------------------------+
9. 比较两个字符的大小
strcmp(str1,str2):比较两个字符的ascii值大小,如果str1>str2,则返回1;str1<str2,返回-1;str1=str2,返回0;
mysql> select strcmp('a','9'),strcmp('z','您');
+-----------------+-------------------+
| strcmp('a','9') | strcmp('z','您') |
+-----------------+-------------------+
| 1 | -1 |
+-----------------+-------------------+
1 row in set (0.00 sec)
日期与时间函数
1. 当前时间,当前日期
curdate(),current_date():返回当前系统的日期值
curtime(),current_time():返回当前系统的时间值
now(),sysdate():返回当前系统的日期与时间值
2. date_add(),date_sub(),adddate(),和subdate()
date_add(date,interval value type),adddate(date,interval value type):函数功能相同,都是向日期添加指定的日期间隔
date_sub(date,interval value type),subdate(date,interval value type):函数功能相同,都是向日期减去指定的日期间隔
间隔类型:
YEAR 年
MONTH 月
WEEK 周
DAY 日
HOUR 时
MINUTE 分
SECOND 秒
YEAY_MONTH 年_月
DAY_HOUR 日-时
DAY_MINUTE 日-分
DAY_SECOND 日-秒
HOUR_MINUTE 时-分
HOUR_SECOND 时-秒
MINUTE_SECOND 分-秒
mysql> select date_add('2022-01-01 00:00:00',interval '1 1:30:30' day_second); +-----------------------------------------------------------------+ | date_add('2022-01-01 00:00:00',interval '1 1:30:30' day_second) | +-----------------------------------------------------------------+ | 2022-01-02 01:30:30 | +-----------------------------------------------------------------+
3. date_format()
date_format(date,'format'):按照给定的格式,返回日期中的值
格式:
%Y 四位数字的年份
%m 两位数字的月份
%d 两位数字的天数
%H 两位数字的小时
%i 两位数字的分钟
%s 两位数字的秒
%T 24小时制的时间形式
%w 以数字表达的周
%j 一年中的第几天
%p 上下午
mysql> select date_format(now(),'%Y-%m-%d %H:%i:%s %j %W'); +-----------------------------------------------------+ | date_format('2022-01-01','%Y-%m-%d %H:%i:%s %j %W') | +-----------------------------------------------------+ | 2024-01-09 11:20:48 001 Saturday | +-----------------------------------------------------+
4. datediff()
datediff(date1,date2):返回两个日期之间相差的天数
mysql> select datediff('2023-01-01','2022-01-01');
+-------------------------------------+
| datediff('2023-01-01','2022-01-01') |
+-------------------------------------+
| 365 |
+-------------------------------------+
5. dayofyear(),dayofmonth(),dayofweek()
dayofyear(date):返回日期是一年中的第几天。功能等同于date_format(date,'%j')
dateofmonth(date):返回日期是一个月的第几天。功能等同于day()函数
dateofweek(date):返回指定日期在一周内的索引值
mysql> select dayofyear('2022-12-12'),dayofmonth('2022-12-12'),dayofweek('2022-12-12'); +-------------------------+--------------------------+-------------------------+ | dayofyear('2022-12-12') | dayofmonth('2022-12-12') | dayofweek('2022-12-12') | +-------------------------+--------------------------+-------------------------+ | 346 | 12 | 2 | +-------------------------+--------------------------+-------------------------+

浙公网安备 33010602011771号