MySQL的时间差函数、日期转换计算函数

2023-09-20 17:38:49

MySQL的时间差函数(TIMESTAMPDIFF、DATEDIFF)、日期转换计算函数(date_add、day、date_format、str_to_date)

  1. 时间差函数(TIMESTAMPDIFF、DATEDIFF)

需要用MySQL计算时间差,使用TIMESTAMPDIFF、DATEDIFF,记录一下实验结果

--0
select datediff(now(), now());
 
--2
select datediff('2023-09-22 23:59:00', '2023-09-20 00:00:00');
 
--2
select datediff('2023-09-22 00:00:00', '2023-09-20 23:59:00');
 
--1
select TIMESTAMPDIFF(DAY, '2023-09-20 23:59:00', '2023-09-22 00:00:00');
 
--2
select TIMESTAMPDIFF(DAY, '2023-09-20 00:00:00', '2023-09-22 00:00:00');
 
--2
select TIMESTAMPDIFF(DAY, '2023-09-20 00:00:00', '2023-09-22 12:00:00');
 
--2
select TIMESTAMPDIFF(DAY, '2023-09-20 00:00:00', '2023-09-22 23:59:00');
 
--71
select TIMESTAMPDIFF(HOUR, '2023-09-20 00:00:00', '2023-09-22 23:00:00');
 
--4260
select TIMESTAMPDIFF(MINUTE, '2023-09-20 00:00:00', '2023-09-22 23:00:00');
  1. 日期转换计算函数(date_add、day、date_format、str_to_date)

DATE_ADD() 函数使用

定义和用法:DATE_ADD() 函数向日期添加指定的时间间隔。

DATE_ADD(date,INTERVAL expr type)

date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。
type 参数可以是下列值:DAY ,WEEK 等

DATE_ADD("2023-09-20 ",INTERVAL 2 day)

结果:"2023-09-22 "
DATE_ADD("2023-09-20 ",INTERVAL -2 day)

结果:"2023-09-18 "

date_format():返回格式化后的时间日期

语法:

DATE_FORMAT(date,format);

参数:

date:需要格式化的有效时间日期

format:预定义格式的字符串,每个说明符前面都有一个百分比号(%).

SELECT id,
       name,
       DATE_FORMAT(start_time, '%Y-%m-%d %H:%i:%S') start_time,
       DATE_FORMAT(end_time, '%Y-%m-%d %H:%i:%S')   end_time
FROM user

STR_TO_DATE函数用于将字符串转变为日期/时间值

STR_TO_DATE函数与DATE_FORMAT函数的作用是相反的

语法格式

STR_TO_DATE(str,format)

srt:要格式化为日期的字符串(输入字符串)

format:要使用的格式字符串

如果不能按照format解析str,STR_TO_DATE函数将返回NULL

如果其中任何一个参数为NULL,STR_TO_DATE函数将返回NULL

预定义说明字符列表:
在这里插入图片描述
常用的的format格式
在这里插入图片描述

练习案例
将字符串转换为DATE值


-- 2023-09-20
SELECT STR_TO_DATE('20,9,2023','%d,%m,%Y');
-- 2023-09-20
SELECT STR_TO_DATE('2023-09-20 11:30:00','%Y-%m-%d');
-- 2023-08-01
SELECT STR_TO_DATE('August,1,2023', '%M,%e,%Y');
-- 2023-08-10
SELECT STR_TO_DATE('August 10 2023', '%M %d %Y');
-- 2023-08-15
SELECT STR_TO_DATE('Monday, August 15, 2023', '%W,%M %e, %Y');

将字符串转换为DATETIME-- 2023-09-20 11:30:00
SELECT STR_TO_DATE('20230920 1130','%Y%m%d %h%i');
-- 2023-09-20 11:30:00
SELECT STR_TO_DATE('2023-09-20 11:30:00','%Y-%m-%d %H:%i:%s');
-- 2023-09-20 10:40:10
SELECT STR_TO_DATE('2023,9,20 10,40,10', '%Y,%m,%d %h,%i,%s');
STR_TO_DATE函数在根据格式字符串format解析输入字符串str时,忽略输入字符串str末尾的额外字符

-- 2023-09-20
SELECT STR_TO_DATE('20,9,2023 extra characters','%d,%m,%Y'); 
-- 2023-09-20 11:30:00
SELECT STR_TO_DATE('20230920 1130 extra characters','%Y%m%d %h%i');
如果输入字符串str是非法的,则STR_TO_DATE函数返回NULL

-- NULL
SELECT STR_TO_DATE('2023','%Y');
-- NULL
SELECT STR_TO_DATE('11','%h');
-- NULL
SELECT STR_TO_DATE('1130','%h%i');
-- NULL
SELECT STR_TO_DATE('113005','%h%i%s');
-- NULL
SELECT STR_TO_DATE('August,20,2023', '%M %e %Y');
-- NULL
SELECT STR_TO_DATE('Monday, August 20, 2023', '%W %M %e %Y');

-- 用日期与字符串转换,计算当月第一天、下月第一天
select curdate() as '当前日期', 
DATE_FORMAT(curdate(), '%Y-%m') as '当前月份', 
str_to_date(concat(DATE_FORMAT(curdate(), '%Y-%m'), '-01'), '%Y-%m-%d') as '当前月的第一天', 
date_add(str_to_date(concat(DATE_FORMAT(curdate(), '%Y-%m'), '-01'), '%Y-%m-%d'), interval 1 month) as '下月的第一天';
 
-- 当前月的最后一天
select last_day(curdate());
 
-- 下月第一天
select date_add(last_day(curdate()), interval 1 day);
 
-- 当天为当月的第几天
select day(curdate());
 
-- 当月第一天
select date_add(curdate(), interval 1-(day(curdate())) day);
更多推荐

设计模式Java实战

文章目录一、前置1.1目的1.2面向对象1.3接口和抽象类二、七大设计原则2.1单一职责2.2接口隔离原则2.3依赖倒转原则2.4里氏替换原则2.5开闭原则2.6不要重复原则2.7迪米特最少知道法则三、23种设计模式3.1创建型:创建对象3.1.1单例模式定义最佳实践场景线程级别的单例缺点3.1.2工厂模式(简单工厂)

DolphinDB x 龙蜥社区,打造多样化的数据底座

近日,浙江智臾科技有限公司(以下简称“DolphinDB”)正式签署CLA贡献者许可协议,加入龙蜥社区(OpenAnolis)。DolphinDB主创团队从2012年开始投入研发产品。作为一款基于高性能时序数据库,DolphinDB支持复杂分析与流处理的实时计算平台,集成了功能强大的编程语言和高吞吐率的流数据分析系统,

Appium 全新 2.0 全新跨平台生态,版本特性抢鲜体验!

关于AppiumV2AppiumV2beta版本在2021年发布,从2022年1月1号开始,Appium核心团队不会再维护Appium1.x版本了,所有近期官方发布的平台驱动(如Android平台的UIAutomator,IOS平台的XCUITest)不再兼容Appium1.x,需要基于AppiumV2版本。让我们一起

6.2 构建并评价聚类模型

6.2构建并评价聚类模型6.2.1使用sklearn估计器构建聚类模型1、聚类的概念2、常见聚类方法3、使用sklearn估计器构建聚类模型4、sklearn估计器代码:构建K-Means聚类模型6.2.2评价聚类模型1、FMI评价法2、轮廓系数评价法3、Calinski-Harabasz指数评价法6.2.1使用skl

Spring Security 源码详解

SpringSecurity源码详解这里主要介绍SpringSecurity的整体流程,方便以后查阅!!!一、SpringSecurity过滤器链加载1、注册springSecurityFilterChain过滤器当SpringBoot项目启动后,SecurityFilterAutoConfiguration类会加载D

[交互]AJAX

[交互]AJAX创建XMLHttpRequest发送请求服务器响应XMLHttpRequestreadyState状态值响应数据请求状态变更回调函数XMLHttpRequeststatus的值常用状态码设置AJAX是技术,不是工具,区别于axios、fetch、$.ajax等(封装工具)现有交互工具,是用于改变部分网页

最佳优先搜索简介

概念:最佳优先搜索算法(Best-FirstSearch)是一种启发式搜索算法,用于在图中找到从起点到目标节点的最佳路径。使用一个优先队列来存储待扩展的节点,优先队列根据节点的启发式评估函数值进行排序。在每次迭代中,算法选择队列中启发式评估函数值最小的节点进行扩展,直到找到目标节点或遍历完所有节点。最佳优先搜索算法用于

什么是智能推荐?智能推荐的原理是什么?

一、智能推荐的魔力2020年的愚人节晚间,罗永浩在抖音带货,相信你也被刷屏了吧。3小时的直播过程中,22款产品轮番出场,最终首播支付交易总额突破1.1亿、整场直播观看总人数超过4800万、总销售件数逾91万,粉丝打赏音浪收入3600万,由此看来,罗老师看起来离“带货一哥”的目标又进了一步。不得不说,这场魔幻版的流量狂潮

如何学习java

带着问题去学?为什么我们debug的时候代码会停在哪一个位置什么是多态?(这个在类的生命周期里面寻找答案)我们学习java就是从代码到成为程序的过程所以这很明显就是我们的编译原理和os打交道这很明白就是操作系统和另一台机器打交道,那么就是计算机网络java指令8个从代码到程序就是从代码到字节码(javap命令可以看到)

七、运算符

运算符1.运算符1.1.赋值运算符1.2.算数运算符1.3.自增和自减运算符1.4.比较运算符1.5.逻辑运算符1.6.位运算符1.6.1.按位与运算1.6.2.按位或运算1.6.3.按位取反运算1.6.4.按位异或运算1.6.5.移位操作1.6.6.复合赋值运算符1.6.7.三元运算符1.6.8.运算符优先级1.7.

Linear Feedback Shift Register

线性反馈移位寄存器(LinearFeedbackShiftRegister,简称LFSR)是一种数字电路设计和密码学中常用的寄存器类型。它是一种简单而高效的方式,用于生成伪随机的二进制序列,并在数据混淆、错误检测和加密等领域中有应用。LFSR通常用于流密码的生成。以下是LFSR的关键特性和组成部分:移位寄存器:LFSR

热文推荐