Mysql常见函数记录

记录日常中常用的函数,想记录成为函数百科.持续更新ing

1 group_concat

功能: 将group by产生的同一个分组中的值连接起来,返回一个字符串结果

语法: group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )

tips: []内为可选, 分隔符不默认是逗号,

应用场景: 常见一对多表结构关系,将根据一表方分组,查询对应多表某列数据,以规定的格式拼接成字符串

eg:

# 查询用户表所有信息
SELECT * FROM `userinfo`

image-20210221145356847

# 根据brand分组, 查询每个brand的title,并以逗号,拼接
select brand ,GROUP_CONCAT(title) from `userinfo` GROUP BY brand;

image-20210221145437843

# 根据brand分组, 查询每个brand的title,并以美元符号$拼接
select brand ,GROUP_CONCAT(title separator '$') from `userinfo` GROUP BY brand;

image-20210221145541134

2 @i:=@i+1

Oracle中有一个伪列rownum,在查询结果时生成一组递增的序列号,可以用于分页截断等作用.

Mysql中没有该伪列,可通过上述模拟生成一列自增序号.

功能: 在查询结果时生成一组递增的序列号

语法: SELECT (@i:=@i+1) as rownum , 查询字段 FROM 查询表名 ,(select @i:=0) as a

tips:

  • (select @i:=0) 定义初始序号为0(可更换为其他如10,20,…),且必须起别名,别名无规定,不与查询表名相同即可.
  • (@i:=@i+1) 定义递增规则,每次递增为1(可更换为5,10,…)
# 查询用户表所有信息
SELECT * FROM `userinfo`

image-20210221145356847

# 添加自增序列号 初始为0,每次递增1
SELECT (@i:=@i+1) as rownum , u.* FROM `userinfo` u ,(select @i:=0) a

image-20210221151516913

# 添加自增序列号 初始为10,每次递增5
SELECT (@i:=@i+5) as rownum , u.* FROM `userinfo` u ,(select @i:=10)  a

image-20210221152437821

3 order by 排序问题

功能: 将查询结果,按照指定的规则排序
语法: order by colum [asc | desc]
常见排序,升序(ASC,查询默认为ASC),降序(DESC)

tips:遇到需要和Null一起排序:

# null默认被放在最前  oracle相反
order by colum asc   

# null被强制放在最前,不为null的按声明顺序[asc|desc]进行排序
ORDER BY IF(ISNULL(update_date),0,1) 

4 DATE_FORMAT

功能: 用于以不同的格式显示日期/时间数据
语法: DATE_FORMAT(date,format)
date 参数是合法的日期,format 规定日期/时间的输出格式.

格式 描述
%a 缩写星期名
%b 缩写月名
%c 月,数值
%D 带有英文前缀的月中的天
%d 月的天,数值(00-31)
%e 月的天,数值(0-31)
%f 微秒
%H 小时 (00-23)
%h 小时 (01-12)
%I 小时 (01-12)
%i 分钟,数值(00-59)
%j 年的天 (001-366)
%k 小时 (0-23)
%l 小时 (1-12)
%M 月名
%m 月,数值(00-12)
%p AM 或 PM
%r 时间,12-小时(hh:mm:ss AM 或 PM)
%S 秒(00-59)
%s 秒(00-59)
%T 时间, 24-小时 (hh:mm:ss)
%U 周 (00-53) 星期日是一周的第一天
%u 周 (00-53) 星期一是一周的第一天
%V 周 (01-53) 星期日是一周的第一天,与 %X 使用
%v 周 (01-53) 星期一是一周的第一天,与 %x 使用
%W 星期名
%w 周的天 (0=星期日, 6=星期六)
%X 年,其中的星期日是周的第一天,4 位,与 %V 使用
%x 年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y 年,4 位
%y 年,2 位

eg:

# DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')
# DATE_FORMAT(NOW(),'%m-%d-%Y')
# DATE_FORMAT(NOW(),'%d %b %y')
# DATE_FORMAT(NOW(),'%d %b %Y %T:%f')

select
	DATE_FORMAT( NOW(), '%b %d %Y %h:%i %p' ) UNION ALL
select
	DATE_FORMAT( NOW(), '%m-%d-%Y' ) UNION ALL
select
	DATE_FORMAT( NOW(), '%d %b %y' ) UNION ALL
select
	DATE_FORMAT( NOW(), '%d %b %Y %T:%f' )

在这里插入图片描述

5 CONCAT

功能: 多个字符合并为一个字符串
语法: CONCAT(s1,s2...sn)
字符串 s1,s2 等多个字符串合并为一个字符串

CONCAT_WS(x, s1,s2…sn)

功能: 将多个字符合并为一个字符串,.每个字符用x分隔
语法: CONCAT_WS(x, s1,s2...sn)
同 CONCAT(s1,s2,…) 函数,但是每个字符串之间要加上 x,x 可以是分隔符.

e.g:

select
	CONCAT('Hello','World')
union all
select
	CONCAT_WS('$$','Welcome','BeiJing')

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ABestRookie/article/details/113918968
今日推荐