当前位置: 首页 > news >正文

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

相关文章:

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

1. 实践案例 在查询mysql数据库获取数据时&#xff0c;有这样一个需求&#xff1a;按每30分钟分组获取电量数据&#xff0c;形成1天48个数据点。 方法一&#xff1a; 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 五参数模型

标题&#xff1a;A Five-Parameter Model of the AlGaN/GaN HFET 来源&#xff1a;IEEE TRANSACTIONS ON ELECTRON DEVICES&#xff08;15年&#xff09; 摘要—我们引入了AlGaN/GaN异质结场效应晶体管&#xff08;HFET&#xff09;漏极电流Id&#xff08;Vgs&#xff0c;Vds…...

矩阵的除法

B/A 如果矩阵A可逆&#xff0c;那么 证明&#xff1a; A/AB 如果矩阵A和B都可逆&#xff0c;那么 证明&#xff1a;...

Java中的 向上转型 | 向下转型

目录 一.向上转型 直接赋值 总结&#xff1a; 通过传参 通过返回值 二.向下转型 instanceof 一.向上转型 向上转型其实就是创建一个子类对象&#xff0c;并将其当作父类对象来使用&#xff0c;一般语法格式如下&#xff1a; 父类类型 对象名 new 子类类型() 一般有以…...

【华为OD机试AB高分必刷题目】朋友圈(C++-并查集Union-Find实现)

🚀你的旅程将在这里启航!本专栏所有题目均包含优质解题思路,高质量解题代码,详细代码讲解,助你深入学习,高分通过! 文章目录 【华为OD机试AB高分必刷题目】朋友圈(C++-并查集Union-Find实现)题目描述解题思路C++题解代码代码OJ评判结果代码讲解寄语【华为OD机试AB高分…...

前端面试题之vue篇

vue基础 vue的基本原理 当一个Vue实例创建时&#xff0c;Vue会遍历data中的属性&#xff0c;用Object.defineProperty(Vue使用proxy)转换为getter/setter&#xff0c;并且在内部追踪相关依赖&#xff0c;在属性被访问和修改时通知变化。每个组件实例都有相应的watcher程序实例…...

Java进阶(垃圾回收GC)——理论篇:JVM内存模型 垃圾回收定位清除算法 JVM中的垃圾回收器

前言 JVM作为Java进阶的知识&#xff0c;是需要Java程序员不断深度和理解的。 本篇博客介绍JVM的内存模型&#xff0c;对比了1.7和1.8的内存模型的变化&#xff1b;介绍了垃圾回收的语言发展&#xff1b;阐述了定位垃圾的方法&#xff0c;引用计数法和可达性分析发以及垃圾清…...

GaN HEMT 电容的分析建模,包括寄生元件

标题&#xff1a;Analytical Modeling of Capacitances for GaN HEMTs, Including Parasitic Components 来源&#xff1a;IEEE TRANSACTIONS ON ELECTRON DEVICES&#xff08;14年&#xff09; 摘要&#xff1a;本文提出了一种基于表面势的终端电荷和电容模型&#xff0c;包…...

Python实战 | 使用 Python 和 TensorFlow 构建卷积神经网络(CNN)进行人脸识别

专栏集锦&#xff0c;大佬们可以收藏以备不时之需 Spring Cloud实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏&#xff1a;https:/…...

JLink edu mini 10Pin接口定义

注意&#xff1a;SWD接口在阵脚2&#xff0c;4&#xff1b;而20Pin的SWD接口在阵脚7&#xff0c;9 参考&#xff1a;1 官网资料&#xff1b; 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 还是旧版本&#xff1f; ** 如果你已经按照上述步骤安装了新版本的 Go&#xff0c;但 go version 命令仍然显示旧版本&#xff0c;可能是因为你的环境变量设置不正确或未正确生效。你可以尝试以下方法来解决问题&#xff1a; 重新…...

spring boot security 自定义AuthenticationProvider

spring boot security 自定义AuthenticationProvider 基于 spring boot 3.x 场景实现 手机验证码登陆 实现 CaptureCodeAuthenticationFilter public class CaptureCodeAuthenticationFilter extends AbstractAuthenticationProcessingFilter {private static final Strin…...

某电力设计公司绩效考核优化项目成功案例纪实

——引入角色定位考核法&#xff0c;建立多维度评价体系&#xff0c;支持业务转型后的客观评价 【客户行业】电力行业 【问题类型】绩效考核 【客户背景及现状分析】 某电力设计公司成立于2000年左右&#xff0c;是一家从事输变电工程勘察、设计、咨询的专业公司&#xff0c…...

力扣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、货币的转换&#xff08;字符串 crr107&#xff09;3、凯撒加密&#xff08;book 实验 19&#xff09;4、字符替换5、检测字母或数字6、纠正字母7、输出英文中所有长度为3个字母的单词 1、输出随机字符串 编写程序&#xff0c;输出由英文字母大小写或…...

Transmit :macOS 好用的 Ftp/SFtp 工具

Transmit 是一种功能强大的 FTP/SFTP/WebDAV 客户端软件&#xff0c;是一个 Mac OS X 平台上设计的文件传输软件。它由 Panic&#xff08;一家以软件工具为主的公司&#xff09;开发和维护&#xff0c;是一款非常受欢迎且易于使用的软件&#xff0c;而且被广泛认为是 Mac OS X …...

【Github】git clone命令下载文件中途停止

方法一&#xff1a; 使用git clone命令下载github上的源代码时&#xff0c;有时文件下载到一定百分比时就停止不动&#xff0c; 这是因为我们所下载的文件很大&#xff0c;超过了git预先分配的Postbuffer容量&#xff0c;所以一直卡在那里。可以使用以下命令查看当前Postbuffe…...

Clickhouse学习笔记(10)—— 查询优化

单表查询 Prewhere 替代 where prewhere与where相比&#xff0c;在过滤数据的时候会首先读取指定的列数据&#xff0c;来判断数据过滤&#xff0c;等待数据过滤之后再读取 select 声明的列字段来补全其余属性 简单来说就是先过滤再查询&#xff0c;而where过滤是先查询出对应…...

[量化投资-学习笔记012]Python+TDengine从零开始搭建量化分析平台-策略回测

上一章节《MACD金死叉策略回测》中&#xff0c;对平安银行这只股票&#xff0c;按照金死叉策略进行了回测。 但通常我们的股票池中有许多股票&#xff0c;每完成一个交易策略都需要对整个股票池进行回测。 下面使用简单的轮询&#xff0c;对整个股票池进行回测。 # 计算单只…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...