MYSQL函数

本文详细介绍了MySQL中的各种函数,如拼接(CONCAT,CONCAT_WS),分组(GROUP_CONCAT),条件判断(IF,IFNULL,NULLIF,ISNULL),时间处理(INTERVAL,DATE_FORMAT,TIMESTAMPDIFF),字符串操作(LOCATE,TRIM)以及JSON数据解析(json_extract)。
摘要由CSDN通过智能技术生成


前言

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


一、MYSQL 函数使用

1 数据表

id|name |password|birthday  |hobby      |
--+-----+--------+----------+-----------+
 1|tom  |123456  |2021-12-12|打球 lol sing|
 2|jerry|123456  |2021-12-12|movie      |

1 CONCAT() 函数 用于拼接数据

  1. 格式
concat('param1','param2','param3')
  1. 说明 拼接 多个参数
  2. 举例
select * from `user` u 
where hobby like concat('%','球','%') 

select concat(name,':',birthday) from `user` u  

2 CONCAT_WS() 函数 用于拼接数据,并可以指定拼接符号

  1. 格式
concat('param1','param2','param3')
  1. 说明 拼接多个参数,第一个参数为分隔符,禁止为 null
  2. 举例
select concat_ws(' like: ',name,hobby) as myLike from `user` u   

3 GROUP_CONCAT() 函数 用于获取列表

  1. 格式
group_concat('param1')
  1. 说明 拼接多个参数,第一个参数为分隔符,禁止为 null
  2. 举例
select group_concat(distinct dept seoarator '#') as allDept from `user` u 

select group_concat( dept order by dept) as allDept from `user` u   

4 IF() 函数 用于获取列表

  1. 格式
IF(expression,'param1','param2')
  1. 说明 expression返回值为布尔值的表达式,表达式值true 则返回 param1 ,表达式值为false 则返回 param2
  2. 举例
select  if(u.sex=0,'男','女')as sex from user  u

5 IFNULL() 函数 用于获取列表

  1. 格式
ifnull(expression,'param1')
  1. 说明 expression为null 时 返回 param1 ,expression不为 null 时 返回 expression
  2. 举例
select ifnull(u.hobby,'read book') from user  u 

6 NULLIF() 函数 用于获取列表

  1. 格式
nullif ('param1','param2')
  1. 说明 param1 与 param2 相等时返回 null ,param1 与 param2不相等时 返回 param1
  2. 举例
select nullif ('a','a')from `user` u 

select nullif ('a','b')from `user` u 

7 ISNULL() 函数 用于获取列表

  1. 格式
isnull('param1')
  1. 说明 param1不为null 时返回0,param1不为null 时返回 1
  2. 举例
select isnull(u.hobby) as haveHobby from `user` u   

8 INTERVAL 作为关键字时,表示为时间间隔,

  1. 说明 常用在date_add()、date_sub()函数中,操作时间的变化
  2. 举例
select date_add("2023-11-16",interval+1 day) from `user` u 

select date_sub("2023-11-16",interval+1 day) from `user` u  

9 INTERVAL() 作为函数时,表示为比较函数

  1. 格式 interval(num1,num2,num3,…)
  2. 说明 比较num1后面 比num1小的数字,后面的数字需要从小到大排序
  3. 举例
select interval (4,1,2,3,4,5,6,7,8) from `user` u 
// 4
select interval (4,1,2,5,6,2,5,1) from `user` u  
// 2

10 DATE_FORMAT() 函数 用于规范时间格式

  1. 格式
DATE_FORMAT(date,format)
  1. 说明 date 时间数据 format: 需要转化的格式
  2. 举例
select date_format(birthday,'%Y-%m-%d %h:%m:%s') from `user` u 

11 TIMESTAMPDIFF() 函数 获取时间差

  1. 格式
iTIMESTAMPDIFF(unit, start_date, end_date)
  1. 说明 unit 时间单位 start_date 开始时间 end_date 结束时间 返回结果 结束时间 - 开始时间 对应的 时间单位数量 可为负值
  2. 举例
select TIMESTAMPDIFF(day,date_format(birthday,'%Y-%m-%d %h-%m-%s'),'2020-12-12 12:12:12') as days from `user` u 

12 LOCATE() 函数 获取子字符串出现位置

  1. 格式1 locate(‘str1’,‘str2’)
  2. 格式2 locate(''str1,‘str2’,index)
iTIMESTAMPDIFF(unit, start_date, end_date)
  1. 说明 格式1 返回 str2 在 str1 中出现的位置 返回 从index开始 str2 在 str1中出现的位置
  2. 举例
select locate('h','abcdefghigklmnopqrstuvwxyzabcdefghigklmnopqrstuvwxyz') as indexs from `user` u 

select locate('h','abcdefghigklmnopqrstuvwxyzabcdefghigklmnopqrstuvwxyz',27) as indexs from `user` u 

13 TRIM() 函数 去除指定符号或空格

  1. 格式1 TRIM(str)
  2. 格式2 TRIM(BTTH ‘str1’ from str2)
TRIM(BOTH '"' FROM '"TOM"')
  1. 说明 去除 str2 中 的 str1符号
  2. 举例
select TRIM(BOTH '"' from '"tom"') name  from user

14 json_extract 函数 解析json数据

  1. 格式 json_extract(jsonData,‘$.str’
  2. 说明 jsonData为 josn格式数据 str 为 json数据中的一个key 该函数获取json数据中指定key的值
  3. 举例
create table `user` (
	`name` varchar(10) not null,
	`age` int(11) default null,
	`datum` json,
	PRIMARY key (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

insert into user (name,age,datum) values ('tom',
15,
'{
"sex":"男",
"like":"reading",
"notLike":"work"
}')
// 查询数据  
select name name ,age age ,json_extract(datum,'$.sex') sex ,json_extract(datum,'$.like') likes,json_extract(datum,'$.notLike') notlike
from user 
// 但是这种数据查询出来的json数据会带有双 ”“   ---- tom  | 15|"男"|"reading"|"work"   |

// 可以使用 trim函数去除 ”“
select name name ,age age ,TRIM(BOTH '"'from  json_extract(datum,'$.sex')) sex ,trim(both '"' from json_extract(datum,'$.like')) likes,trim(both '"' from json_extract(datum,'$.notLike')) notlike
from user  
-----    tom  | 15||reading|work   |

15 FROM_UNIXTIME函数 时间戳转date()类型

  1. 格式 FROM_UNIXTIME(time/1000 ,‘%Y-%m-%d %h:%i:%s’)

  2. time是一个带毫秒的时间戳数据,如果不带毫秒则不需要 /1000,右侧是date格式

  3. 举例

select  FROM_UNIXTIME(ddr.create_time/1000 ,'%Y-%m-%d %h:%i:%s') from dev_device_register

16 now() CURDATE() 时间函数

  1. now() 表示当前时间 格式为 YYYY-MM-dd hh:mm:ss
  2. curdate() 表示日期 格式为 YYYY-MM-dd

17 TO_DAYS DATE_SUB DATE 时间比较函数

  1. date_sub()函数 格式 DATE_SUB(start_date,INTERVAL expr unit); 表示从start_date时间值中减去指定单位的时间数量 比如 DATE_SUB(‘2024-07-12’,INTERVAL 1 DAY) 表示从2024-07-12 减去一天,为 2024-07-11

  2. TO_DAYS TO_DAYS(‘2024-07-06’)给定一个日期date, 返回一个从年份0000-00-00开始计算的天数,比如select TO_DAYS(‘0000-01-01’) as days 返回为 1

  3. DATE() 将时间格式化为 ‘YYYY-MM-dd’格式 ,比如 select DATE(‘2024-12-06 12:52:21’) as days 返回为 ‘2024-12-06’

  4. 查询今日数据

    SELECT * FROM testTable a WHERE TO_DAYS(a.ApplyDate) = TO_DAYS(NOW());
    SELECT * FROM testTable a WHERE DATE(a.ApplyDate) = CURDATE(); 
    
  5. 查询昨日数据

    SELECT * FROM testTable a WHERE TO_DAYS(NOW()) - TO_DAYS(a.ApplyDate) = 1
    SELECT * FROM testTable a WHERE DATE(a.ApplyDate) = DATE_SUB(CURDATE(), INTERVAL 1 DAY);
    
  6. 查询近七日数据

    SELECT * FROM testTable a where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= DATE(a.ApplyDate);
    
    

18 ON DUPLICATE KEY UPDATE 插入数据时存在主键或唯一键冲突的数据时更新

  1. 所有与insert 语句中时,存在以下效果,必须要求表存在主键或唯一键,执行插入语句时,如果存在主键或存在唯一的元数据时,将进行更新操作,否则进行插入操作。

  2. 并且可以指定跟新哪些字段 以下示例只更新 password 字段

    insert into user  (password,birthday) values('abcdefg','2024-12-23') ON DUPLICATE KEY UPDATE password=values(password)
    
  3. mybatis-plus中批量插入的时候使用示例

     	<insert id="insertStatisticsDeviceInfo">
    			insert into  iot_statistics_device_info
    				(record_date,count,type,extend_info,developer_id)
    			values
    			<foreach collection="insertDeviceLIst" index="index" separator="," item="item" >
    				(#{item.recordDate},#{item.count},#{item.type},#{item.extendInfo},#{item.developerId})
    			</foreach>
    		ON DUPLICATE KEY UPDATE
    		count = values(count),
    		extend_info = values(extend_info)
    	</insert>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值