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) |
| %p | AM或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
相关文章:
MySQL查询时间处理相关函数与方法实践笔记
1. 实践案例 在查询mysql数据库获取数据时,有这样一个需求:按每30分钟分组获取电量数据,形成1天48个数据点。 方法一: select hour(a.CreateTime) 时点,case when MINUTE(a.CreateTime)<30 then 1 else 2 end 半小时,sum(a…...
springboot全局拦截sql异常
起因:非法用户可通过特定的输入(如输入内容超长)等操作,使后台逻辑发生错误,从而使后台sql语句暴露至前台,进而为sql攻击提供条件 处理流程:经查找com.mysql.cj.jdbc.exceptions的父类为SQLException,在全局异常处理类中增加如下配置,经测试不起作用 ExceptionHandler(SQLExce…...
AlGaN/GaN HFET 五参数模型
标题:A Five-Parameter Model of the AlGaN/GaN HFET 来源:IEEE TRANSACTIONS ON ELECTRON DEVICES(15年) 摘要—我们引入了AlGaN/GaN异质结场效应晶体管(HFET)漏极电流Id(Vgs,Vds…...
矩阵的除法
B/A 如果矩阵A可逆,那么 证明: A/AB 如果矩阵A和B都可逆,那么 证明:...
Java中的 向上转型 | 向下转型
目录 一.向上转型 直接赋值 总结: 通过传参 通过返回值 二.向下转型 instanceof 一.向上转型 向上转型其实就是创建一个子类对象,并将其当作父类对象来使用,一般语法格式如下: 父类类型 对象名 new 子类类型() 一般有以…...
【华为OD机试AB高分必刷题目】朋友圈(C++-并查集Union-Find实现)
🚀你的旅程将在这里启航!本专栏所有题目均包含优质解题思路,高质量解题代码,详细代码讲解,助你深入学习,高分通过! 文章目录 【华为OD机试AB高分必刷题目】朋友圈(C++-并查集Union-Find实现)题目描述解题思路C++题解代码代码OJ评判结果代码讲解寄语【华为OD机试AB高分…...
前端面试题之vue篇
vue基础 vue的基本原理 当一个Vue实例创建时,Vue会遍历data中的属性,用Object.defineProperty(Vue使用proxy)转换为getter/setter,并且在内部追踪相关依赖,在属性被访问和修改时通知变化。每个组件实例都有相应的watcher程序实例…...
Java进阶(垃圾回收GC)——理论篇:JVM内存模型 垃圾回收定位清除算法 JVM中的垃圾回收器
前言 JVM作为Java进阶的知识,是需要Java程序员不断深度和理解的。 本篇博客介绍JVM的内存模型,对比了1.7和1.8的内存模型的变化;介绍了垃圾回收的语言发展;阐述了定位垃圾的方法,引用计数法和可达性分析发以及垃圾清…...
GaN HEMT 电容的分析建模,包括寄生元件
标题:Analytical Modeling of Capacitances for GaN HEMTs, Including Parasitic Components 来源:IEEE TRANSACTIONS ON ELECTRON DEVICES(14年) 摘要:本文提出了一种基于表面势的终端电荷和电容模型,包…...
Python实战 | 使用 Python 和 TensorFlow 构建卷积神经网络(CNN)进行人脸识别
专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https:/…...
JLink edu mini 10Pin接口定义
注意:SWD接口在阵脚2,4;而20Pin的SWD接口在阵脚7,9 参考:1 官网资料; 2 【润石RS0104YQ Demo开发板测试分享】J-Link EDU Mini调试5V系统_国产运算放大器_模拟开关_线性稳压器_电平转换器_小逻辑_比较器…...
compile: version “go1.19“ does not match go tool version “go1.18.1“
** 1 安装了新版本的go后 为什么go version 还是旧版本? ** 如果你已经按照上述步骤安装了新版本的 Go,但 go version 命令仍然显示旧版本,可能是因为你的环境变量设置不正确或未正确生效。你可以尝试以下方法来解决问题: 重新…...
spring boot security 自定义AuthenticationProvider
spring boot security 自定义AuthenticationProvider 基于 spring boot 3.x 场景实现 手机验证码登陆 实现 CaptureCodeAuthenticationFilter public class CaptureCodeAuthenticationFilter extends AbstractAuthenticationProcessingFilter {private static final Strin…...
某电力设计公司绩效考核优化项目成功案例纪实
——引入角色定位考核法,建立多维度评价体系,支持业务转型后的客观评价 【客户行业】电力行业 【问题类型】绩效考核 【客户背景及现状分析】 某电力设计公司成立于2000年左右,是一家从事输变电工程勘察、设计、咨询的专业公司,…...
力扣371周赛
力扣第371场周赛 找出强数对的最大异或值 I 枚举 class Solution { public:int maximumStrongPairXor(vector<int>& a) {int n a.size() , res 0;for(int i 0 ; i < n ; i ){for(int j 0 ; j < n ; j ){if(abs(a[i]-a[j])<min(a[i],a[j])){int c (a…...
Python之字符串、正则表达式练习
目录 1、输出随机字符串2、货币的转换(字符串 crr107)3、凯撒加密(book 实验 19)4、字符替换5、检测字母或数字6、纠正字母7、输出英文中所有长度为3个字母的单词 1、输出随机字符串 编写程序,输出由英文字母大小写或…...
Transmit :macOS 好用的 Ftp/SFtp 工具
Transmit 是一种功能强大的 FTP/SFTP/WebDAV 客户端软件,是一个 Mac OS X 平台上设计的文件传输软件。它由 Panic(一家以软件工具为主的公司)开发和维护,是一款非常受欢迎且易于使用的软件,而且被广泛认为是 Mac OS X …...
【Github】git clone命令下载文件中途停止
方法一: 使用git clone命令下载github上的源代码时,有时文件下载到一定百分比时就停止不动, 这是因为我们所下载的文件很大,超过了git预先分配的Postbuffer容量,所以一直卡在那里。可以使用以下命令查看当前Postbuffe…...
Clickhouse学习笔记(10)—— 查询优化
单表查询 Prewhere 替代 where prewhere与where相比,在过滤数据的时候会首先读取指定的列数据,来判断数据过滤,等待数据过滤之后再读取 select 声明的列字段来补全其余属性 简单来说就是先过滤再查询,而where过滤是先查询出对应…...
[量化投资-学习笔记012]Python+TDengine从零开始搭建量化分析平台-策略回测
上一章节《MACD金死叉策略回测》中,对平安银行这只股票,按照金死叉策略进行了回测。 但通常我们的股票池中有许多股票,每完成一个交易策略都需要对整个股票池进行回测。 下面使用简单的轮询,对整个股票池进行回测。 # 计算单只…...
10. 监控与可视化
10. 监控与可视化 本章介绍如何对 OR-Tools 求解过程进行监控,以及结果的可视化展示 目录 求解监控概述 内置统计信息 自定义监控 结果可视化 地图集成 监控大盘 日志与追踪 1. 求解监控概述 1.1 为什么要监控?...
如何快速上手w64devkit:面向开发者的轻量级跨平台编译指南
如何快速上手w64devkit:面向开发者的轻量级跨平台编译指南 【免费下载链接】w64devkit Portable C and C Development Kit for x64 (and x86) Windows 项目地址: https://gitcode.com/gh_mirrors/w6/w64devkit w64devkit是一个专为Windows平台设计的轻量级C和…...
写段代码教会你什么是HOOK技术?HOOK技术能干什么?谓
为 HagiCode 添加 GitHub Pages 自动部署支持 本项目早期代号为 PCode,现已正式更名为 HagiCode。本文记录了如何为项目引入自动化静态站点部署能力,让内容发布像喝水一样简单。 背景/引言 在 HagiCode 的开发过程中,我们遇到了一个很现实的问…...
S2-Pro量化金融分析模拟:基于历史数据的简单策略回测与报告生成
S2-Pro量化金融分析模拟:基于历史数据的简单策略回测与报告生成 1. 引言:当AI遇上量化金融 最近有个做投资的朋友跟我抱怨:"每天盯着K线图眼睛都快瞎了,有没有什么工具能帮我自动分析股票走势?"这让我想到…...
Qwen3语义搜索新体验:开箱即用,轻松实现文本的“深度理解”检索
Qwen3语义搜索新体验:开箱即用,轻松实现文本的"深度理解"检索 1. 引言:传统搜索的局限与语义搜索的突破 在日常工作和生活中,我们经常遇到这样的困扰:明明知道要找什么内容,却因为记不清具体关…...
RePKG深度解析:如何高效提取Wallpaper Engine PKG资源与转换TEX纹理
RePKG深度解析:如何高效提取Wallpaper Engine PKG资源与转换TEX纹理 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 作为一名技术开发者或Wallpaper Engine用户…...
Phi-4-mini-reasoning模型部署与远程管理:MobaXterm高效连接与操作指南
Phi-4-mini-reasoning模型部署与远程管理:MobaXterm高效连接与操作指南 1. 引言 当你需要在远程服务器上部署和运行Phi-4-mini-reasoning这类AI模型时,一个高效的远程连接工具能让你事半功倍。MobaXterm作为一款集成了SSH、SFTP、X11服务器等多种功能的…...
Ardupilot 失控保护机制全解析:从参数配置到实战测试
1. 失控保护机制的重要性 第一次在户外测试无人机时,我眼睁睁看着自己的四轴飞行器因为遥控信号中断像石头一样坠向地面。那次惨痛经历让我深刻理解到:失控保护不是可选功能,而是飞行安全的最后防线。Ardupilot的失控保护机制就像汽车的安全气…...
Qwen3-0.6B-FP8惊艳效果:古文翻译+白话解释+典故溯源三重输出展示
Qwen3-0.6B-FP8惊艳效果:古文翻译白话解释典故溯源三重输出展示 1. 引言:当小模型遇上大智慧 你可能听过很多关于大模型的传说,动辄几百亿参数,需要顶级显卡才能跑起来。但今天我想给你看一个不太一样的家伙——Qwen3-0.6B-FP8。…...
快速体验AI写春联:春联生成模型-中文-base在线Demo搭建教程
快速体验AI写春联:春联生成模型-中文-base在线Demo搭建教程 春节将至,家家户户都开始准备贴春联。但自己写春联不仅需要文采,还得懂对仗平仄,对大多数人来说是个不小的挑战。今天我要介绍的这个"春联生成模型-中文-base&quo…...
