MySQL查询时间处理相关函数与方法实践笔记

1. 实践案例

在查询mysql数据库获取数据时,有这样一个需求:按每30分钟分组获取电量数据,形成1天48个数据点。

方法一:

select  hour(a.CreateTime) 时点,case when MINUTE(a.CreateTime)<30 then 1 else 2 end 半小时,sum(a.ChargeCapacity) 电量  from charging_order a where  DATE_FORMAT(a.CreateTime,'%Y-%m-%d')='2023-11-06' group by hour(a.CreateTime),(case when MINUTE(a.CreateTime)<30 then 1 else 2 end)

结果如下:
在这里插入图片描述

方法二:

select CONCAT(DATE_FORMAT(a.CreateTime,'%H:'), case when MINUTE(a.CreateTime)<30 then '00' else '30' end) CreateTime,sum(a.ChargeCapacity) Capacity  from charging_order a where DATE_FORMAT(a.CreateTime,'%Y-%m-%d')='2023-11-06' group by  CONCAT(DATE_FORMAT(a.CreateTime,'%H:'), case when MINUTE(a.CreateTime)<30 then '00' else '30' end)                  order by CreateTime

在这里插入图片描述

方法三,最终方案(并增加,取近三天的各个时段的均值)。


select  CONCAT('2023-11-06 ', CreateTime) RecordTime,format(sum(Capacity)/3,1) Capacity from                
(select CONCAT(DATE_FORMAT(a.CreateTime,'%H:'), case when MINUTE(a.CreateTime)<30 then '00' else '30' end) CreateTime,sum(a.ChargeCapacity) Capacity  from charging_order a where  DATE_FORMAT(a.CreateTime,'%Y-%m-%d')<'2023-11-06'and a.CreateTime>=date_sub(str_to_date('2023-11-06 00:00', '%Y-%m-%d %H:%i'), interval 3 day)group by  CONCAT(DATE_FORMAT(a.CreateTime,'%H:'), case when MINUTE(a.CreateTime)<30 then '00' else '30' end)                  order by CreateTime  ) bb
group by RecordTime

在这里插入图片描述

2. Mysql时间等处理技术

2.1. 日期时间的加减计算

date_add()

  • 说明:date_add():为当前日期增加一个时间间隔
  • 用法:此函数可用于计算距离当前日期一个月之后的日期
  • 语法格式:DATE_ADD(date,interval expr type)
    • date:指定的时间日期
    • interval:固定写法
    • expr:所增加的时间间隔
    • type:时间间隔的单位,包括:秒、分钟、小时、天、星期、月、季、年等

举例:

# 加1天
select now(),date_add(now(), interval 1 day);
# 加1小时
select now(),date_add(now(), interval 1 hour);
# 加1分钟
select now(),date_add(now(), interval 1 minute );
# 加1秒
select now(),date_add(now(), interval 1 second );# 加1周
select now(),date_add(now(), interval 1 week);
# 加1个月
select now(),date_add(now(), interval 1 month);
# 加1季度
select now(),date_add(now(), interval 1 quarter );
# 加1年
select now(),date_add(now(), interval 1 year );

date_sub()

  • 说明:date_sub():为当前日期减去一个时间间隔
  • 用法:此函数可用于计算距离当前日期一个月之前的日期
  • 语法格式:DATE_SUB(date,interval expr type)

与date_add类似,不再详细举例。

select date_sub(str_to_date('2023-11-06 00:00', '%Y-%m-%d %H:%i'), interval 3 day)

2.2. 字符串转时间

STR_TO_DATE()函数的语法:

STR_TO_DATE(str,fmt);

STR_TO_DATE()根据fmt格式字符串将str字符串转换为日期值。 STR_TO_DATE()函数可能会根据输入和格式字符串返回DATE,TIME或DATETIME值。 如果输入字符串是非法的,则STR_TO_DATE()函数返回NULL。

STR_TO_DATE()函数扫描输入字符串来匹配格式字符串。格式字符串可能包含以百分比(%)字符开头的文字字符和格式说明符。 查看格式说明符列表的DATE_FORMAT函数。

SELECT STR_TO_DATE('2023-11-06 00:00:00', '%Y-%m-%d %H:%i:%s')

2.3. 字符串合并函数

CONCAT() 函数用于将多个字符串连接成一个字符串。语法及使用特点:

CONCAT(str1,str2,…)

返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。可以有一个 或多个参数。

2.4. CASE … WHEN

case when 的语法有两种:

# 简单CASE函数法
CASE 要判断的字段或表达式WHEN 常量1 THEN 要显示的值1或语句1(如果是语句,结尾需要加上分号;[WHEN 常量2 THEN 要显示的值2或语句2][][ELSE 要显示的值n或语句n]
END# CASE搜索函数法
CASEWHEN 条件1 THEN 要显示的值1或语句1(如果是语句,结尾需要加上分号;[WHEN 条件2 THEN 要显示的值2或语句2][][ELSE 要显示的值n或语句n]
END

比较“简单CASE函数法”和“CASE搜索函数法”:

  • “简单CASE函数法”:语法更简洁,但功能不灵活好用,因为它只能对比单值的等式问题;
  • “CASE搜索函数法”:语法有些繁琐,但功能灵活好用,既可以完成等式表达,也可以实现不等式表达。

2.5. HOUR与MINUTE

MINUTE(time)

返回一个整数,指定给定时间或日期时间值的分钟数,也就是返回time的分钟数(范围是0到59)。

select MINUTE('2023-11-06 10:05:03')

返回结果是5.

HOUR(time)

返回time的小时数(范围是0到23)。

2.6. 时间格式

DATE_FORMAT函数简介

要将日期值格式化为特定格式,请使用DATE_FORMAT函数。 DATE_FORMAT函数的语法如下:

DATE_FORMAT(date,format);

  • date:是要格式化的有效日期值
  • format:是由预定义的说明符组成的格式字符串,每个说明符前面都有一个百分比字符(%)。有关预定义说明符的列表,请参见下表。

DATE_FORMAT函数可以使用的参数格式

格式描述
%a缩写星期名(Sun…Sat)
%b缩写月份名(Jan…Dec)
%c月份(1…12)
%d月份中的天数,数字(00…31)
%e月份中的天数,数字(0…31)
%H小时(00…23)
%h小时(01…12)
%i分钟,数字(00…59)
%j一年中的天数(001…366)
%k小时(0…23)
%l小时(1…12)
%M月名字(January…December)
%m月,数字(00…12)
%pAM或PM
%r时间,12小时(hh:mm:ss AM 或 PM)
%s秒(00…59)
%T时间,24小时(hh:mm:ss)
%U一年中的周数(00…53),星期日是一周的第一天
%u一年中的周数(00…53),星期一是一周的第一天
%Y年份,数字,4位
%y年份,数字,2位

例如:

select DATE_FORMAT(now(),'%Y-%m-%d %H:%i:%s')
	2023-11-11 18:07:19

3. pandas使用结果集出现的问题

返回结果集出现#,###.00式样的数据,例如:“1,024.1”。pandas解决方案是滤除逗号。

charging_order['Capacity'] = charging_order['Capacity'].str.replace(',', '').astype('float')

参考:

测试界的飘柔. MySQL数据库时间计算的用法. CSDN博客. 2023.07
山茶花开时。 . [Mysql] DATE_FORMAT函数. CSDN博客. 2023.05

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/169043.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cordova系列之化繁为简:打造全场景适用的Cordova组件

前言 在我之前的文章 Cordova初探 的开篇中说到了Cordova在Android应用开发中的一个显著的局限性就是我们的Activity必须继承其提供的CordovaActivity。这种设计对于那些追求个性化UI设计的项目而言&#xff0c;显得尤为受限。 其实也可以理解&#xff0c;Cordova主要旨在为前…

华为ensp:交换机接口划分vlan

现在要把 e0/0/1 接口放入vlan1 e0/0/2 接口放入vlan2 e0/0/3 接口放入vlan3 默认所有接口都在vlan1所以 e0/0/0 接口不用动 1.创建vlan 进入系统视图模式 直接输入 vlan 编号 即可创建对应vlan vlan 编号 vlan 2 创建vlan2 vlan 3 创建vlan3 2.将接口进入vlan…

基于Python+OpenCV+SVM车牌识别系统-车牌预处理系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介简介系统流程系统优势 二、功能三、系统四. 总结 一项目简介 ## PythonOpenCVSVM车牌识别系统介绍 简介 PythonOpenCVSVM车牌识别系统是一种基于计算机视…

Install Nginx in Linux

Nginx是一款轻量级的Web服务器、反向代理服务器&#xff0c;由于它的内存占用少&#xff0c;启动极快&#xff0c;高并发能力强&#xff0c;在互联网项目中广泛应用。 1.yum 安装 nginx [rootVM-8-7-centos nginx]# yum install -y nginx Loaded plugins: fastestmirror, lang…

38 路由的过滤器配置

3.3.断言工厂 我们在配置文件中写的断言规则只是字符串&#xff0c;这些字符串会被Predicate Factory读取并处理&#xff0c;转变为路由判断的条件 例如Path/user/**是按照路径匹配&#xff0c;这个规则是由 org.springframework.cloud.gateway.handler.predicate.PathRoute…

基于SpringBoot+Vue+mysql卓越导师双选系统设计与实现

博主介绍&#xff1a;✌Csdn特邀作者、博客专家、博客云专家、B站程序阿龙带小白做毕设系列&#xff0c;项目讲解、B站粉丝排行榜前列、专注于Java技术领域和毕业项目实战✌ 系统说明简介&#xff1a; 如今的信息时代&#xff0c;对信息的共享性&#xff0c;信息的流通性有着较…

数据结构预算法--链表(单链表,双向链表)

1.链表 目录 1.链表 1.1链表的概念及结构 1.2 链表的分类 2.单链表的实现(不带哨兵位&#xff09; 2.1接口函数 2.2函数的实现 3.双向链表的实现&#xff08;带哨兵位&#xff09; 3.1接口函数 3.2函数的实现 1.1链表的概念及结构 概念&#xff1a;链表是一种物理存储结…

基于JavaWeb+SSM+Vue校内校园二手交易微信小程序系统的设计和实现

基于JavaWebSSMVue校内校园二手交易微信小程序系统的设计和实现 源码传送入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应…

关于VUE启动内存溢出

安装node v10.14.2 后 启动公司的VUE项目 使用命令npm run dev 命令 报错&#xff1a; <--- Last few GCs --->[20940:00000244699848E0] 215872 ms: Scavenge 1690.2 (1836.4) -> 1679.6 (1836.4) MB, 5.4 / 0.7 ms (average mu 0.266, current mu 0.253) a…

YOLOv7改进:RefConv | 即插即用重参数化重聚焦卷积替代常规卷积,无额外推理成本下涨点明显

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点 3.涨点效果:RefConv,实现有效涨点! 论文地址 …

excel如何加密(excel加密的三种方法)

Excel是一款广泛使用的办公软件&#xff0c;有时候我们需要对一些重要的Excel文件进行加密&#xff0c;以保证文件的安全性。下面将介绍3种常用的Excel加密方法。 方法一&#xff1a;通过路径文件-另存为-工具-常规选项-设置打开或修改权限密码&#xff08;密码只可以使数字、字…

【数据结构初阶】算法的时间复杂度和空间复杂度

各位读者老爷好&#xff01;现在鼠鼠我呀来浅谈一下数据结构初阶中的一个知识点&#xff1a;算法的时间复杂度和空间复杂度&#xff0c;希望对你有所帮助。 在浅谈时间复杂度和空间复杂度之前&#xff0c;咱们可以来了解一下一下几个概念&#xff1a; 1.什么是数据结构 数据结…