MySQL-日期时间函数详解及练习

目录

3.1 返回当前日期

3.2 提取日期部分

3.3 增加或减去时间

3.4 格式化时期或时间

3.5 牛客练习题


3.1 返回当前日期

1. CURDATE() 或 CURRENT_DATE() | 返回当前日期

select curdate();select current_date();

结果:

2. CURTIME() 或 CURRENT_TIME() | 返回当前时间

select curtime();select current_time();

结果:

3. NOW()或CURRENT_TIMESTAMP()或LOCALTIME()或LOCALTIMESTAMP() | 返回当前系统日期时间

select now();
select current_timestamp();
select localtimestamp();

结果:

4. SYSDATE() | 返回函数执行时的时间

注意:NOW()取自mysql的变量”TIMESTAMP”,而这个变量在语句开始执行的时候就设定好了,所以在整个语句执行过程当中都不会变化,而SYSDATE()取的是动态的实时时间。

# 这里两个now返回的值是一样的,因为都是表示语句开始执行的时间
select now(),sleep(3),now();# SYSDATE获取当时执行时实时的时间
select sysdate(),sleep(3),sysdate();

结果:

也正因为有这个区别,我们一般在执行语句的时候,都是用NOW(),因为SYSDATE获取当时实时的时间,这有可能导致主库和从库是执行的返回值是不一样的,导致主从数据不一致。

3.2 提取日期部分

1.【YEAR(date) | 提取年份】、【MONTH(date) | 提取月份】、【DAY(date) | 提取天数】、【HOUR(time) | 提取小时数】、【MINUTE(time) | 提取分钟】、【SECOND(time) | 提取秒】

select year ('2023-12-7'),month('2023-12-7'),day('2023-12-7');
select hour('2023-12-7 20:48:23'),minute('2023-12-7 20:48:23'),second('2023-12-7 20:48:23');

结果:

2.【DAYOFYEAR(date) | 返回一年中的天数(1-366)】、【DAYOFMONTH(date) | 同DAY(date),返回月份中的天数】、【DAYOFWEEK(date) | 返回周几的索引,注意:周日是1,周一是2,。。。周六是7】

select dayofyear ('2023-12-7'),dayofmonth ('2023-12-7'),dayofweek('2023-12-7');

结果:

3.【WEEK(date)或WEEKOFYEAR(date) | 返回一年中的第几周】、【YEARWEEK(date) | 返回年份和周数】

select week ('2023-12-7'),weekofyear('2023-12-7'),yearweek('2023-12-7');

结果:

4.【MONTHNAME(date) | 返回月份的名称】、【DAYNAME(date) | 返回给定日期对应的周几的名称】

select monthname('2023-12-7'),dayname('2023-12-7');

结果:

3.3 增加或减去时间

  1. DATE_ADD(date, INTERVAL expr unit) | 向日期值增加时间间隔

#数值可以是负数,unit可以是如果表达式列出的任意一个类型
select date_add('2023-12-7 20:48:23',interval 1 year) as 'add 1 year',date_add('2023-12-7 20:48:23',interval '1_2' YEAR_MONTH) as 'add 1 year and 2 month',date_add('2023-12-7 20:48:23',interval -1 day) as 'sub 1 day';select date_add('2023-12-7 20:48:23',interval 1 hour) as 'add 1 hour',date_add('2023-12-7 20:48:23',interval '1_2' HOUR_MINUTE) as 'add 1 hour and 2 mins',date_add('2023-12-7 20:48:23',interval -1 second ) as 'sub 1 second';

结果:

unit 表达式类型

YEAR_MONTH

YEAR

DAY_HOUR

MONTH

DAY_MINUTE

DAY

DAY_SECOND

HOUR

HOUR_MINUTE

MINUTE

HOUR_SECOND

SECOND

MINUTE_SECOND

2.【DATEDIFF(date1,date2) | 返回date1 - date2的日期间隔】、【TIMEDIFF(time1, time2) | 返回time1 - time2的时间间隔】

select datediff('2023-12-7','2023-12-15') as '日期差',timediff('2023-12-7 20:48:23','2023-12-7 19:38:00') as '时间差';

结果:

3.4 格式化时期或时间

1. DATE_FORMAT(date, format) | 按指定格式格式化日期

select date_format('2023-12-7 20:48:23','%Y/%m/%d'),date_format('2023-12-7 20:48:23','%Y-%m-%d');

结果:

2. STR_TO_DATE(str,format) | 将时间格式的字符串(str),按照所提供的显示格式(format)转换为DATETIME类型的值

#STR_TO_DATE()函数可能会根据输入和格式字符串返回DATE,TIME或DATETIME值。
select str_to_date('2023-12-7 20:48:23','%Y/%m/%d'),str_to_date('2023-12-7 20:48:23','%Y-%m-%d'),str_to_date('2023-12-7 20:48:23','%Y-%m-%d %H:%i:%s');

结果:

  • #如果输入字符串是非法的,则STR_TO_DATE()函数返回NULL。

  • #如果月份和日期的数字小于10,用0填充,显示两位数字;

3. 常见的format格式

DATE_FORMAT字符串格式

格式化日期

%Y/%m/%d

2022/04/26

%Y-%m-%d

2022-04-26

%e/%c/%Y

4/8/2022

%d/%m/%Y %H:%i

26/04/2022 17:27

%b %d %Y %h:%i %p

Apr 26 2022 05:28 PM

%W %D %M %Y %T

Tuesday 26th April 2022 17:31:34

4. 格式符详解:

格式符

说明

格式符

说明

%Y

4位数字表示年份

%y

表示两位数字表示年份

%M

月名表示月份(January,....)

%m

两位数字表示月份(01,02,03。。。)

%b

缩写的月名(Jan.,Feb.,....)

%c

数字表示月份(1,2,3,...)

%D

英文后缀表示月中的天数(1st,2nd,3rd,...)

%d

两位数字表示月中的天数(01,02...)

%e

数字形式表示月中的天数(1,2,3,4,5.....)

%H

两位数字表示小数,24小时制(01,02..)

%h和%I

两位数字表示小时,12小时制(01,02..)

%k

数字形式的小时,24小时制(1,2,3)

%l

数字形式表示小时,12小时制(1,2,3,4....)

%i

两位数字表示分钟(00,01,02)

%S和%s

两位数字表示秒(00,01,02...)

%W

一周中的星期名称(Sunday...)

%a

一周中的星期缩写(Sun.,Mon.,Tues.,..)

%w

以数字表示周中的天数(0=Sunday,1=Monday....)

%j

以3位数字表示年中的天数(001,002...)

%U

以数字表示年中的第几周,(1,2,3。。)其中Sunday为周中第一天

%u

以数字表示年中的第几周,(1,2,3。。)其中Monday为周中第一天

%T

24小时制

%r

12小时制

%p

AM或PM

%%

表示%

3.5 牛客练习题

牛客SQL28-计算用户8月每天的练题数量

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

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

相关文章

【性能测试】Jmeter 配置元件(一):计数器

Jmeter 配置元件(一):计数器 在 Jmeter 中,通过函数 ${__counter(,)} 可以实现每次加 1 1 1 的计数效果。但如果步长不为 1 1 1,则要利用到我们的计数器。 函数作用${__counter(,)}计数器,每次加 1${__d…

Flink Window中典型的增量聚合(ReduceFunction / AggregateFunction)

一、什么是增量聚合函数 在Flink Window中定义了窗口分配器,我们只是知道了数据属于哪个窗口,可以将数据收集起来了;至于收集起来到底要做什么,其实还完全没有头绪,这也就是窗口函数所需要做的事情。所以在窗口分配器…

Echarts的使用 笔记

1.数据可视化前言 1.1.什么是数据可视化 数据可视化: 就是把数据以更加直观的方式进行呈现. 1.2.数据可视化的好处 清晰有效地传达与沟通信息更容易洞察隐藏在数据中的信息 2.ECharts的基本使用 2.1.ECharts官网 ECharts是百度公司开源的一个使用 JavaScript 实…

力扣题:公共前缀/单词-11.18

力扣题-11.18 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:14.最长公共前缀 解题思想:先找到最小的字符串长度,然后进行字符串的遍历即可 class Solution(object):def longestCommonPrefix(self, strs):""&qu…

DevOps搭建(五)-JDK安装详细步骤

1、官网下载 官方网站下载JDK,这里我们安装JDK8 https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html 点击上图中的Java SE Downloads项目,也可直接点击下面链接进入: Java Downloads | Oracle 往下滚…

BGP综合

1、使用PreVal策略,确保R4通过R2到达192.168.10.0/24。 2、使用AS_Path策略,确保R4迪过R3到达192.168.11.0/24。 3、配置MED策略,确保R4通过R3到达192.168.12.0/24。 4、使用Local Preference策略,确保R1通过R2到达192.168.1.0…

【iOS】数据持久化(三)之SQLite3数据库

目录 数据库简介什么是SQLite?在Xcode引入SQLite APISQL语句的种类存储字段类型 SQLite的使用创建数据库创建表和删表数据表操作增(插入数据INSERT)删(删除数据DELETE)改(更新数据UPDATE)查&…

Gateway

网关的作用: 可以对访问的用户进行身份认证和权限校验还可以服务路由,负载均衡还可以进行请求限流 网关本身也是微服务的一部分,所以需要使用nacos进行服务注册和发现 网关路由的配置 路由id:路由唯一标识uri:路由…

[足式机器人]Part2 Dr. CAN学习笔记-数学基础Ch0-8Matlab/Simulink传递函数Transfer Function

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-数学基础Ch0-8Matlab/Simulink传递函数Transfer Function L − 1 [ a 0 Y ( s ) s Y ( s ) ] L − 1 [ b 0 U ( s ) b 1 s U ( s ) ] ⇒ a 0 y ( t ) y ˙ ( t ) b 0 u ( t ) b 1 u ˙ ( t…

拆解大语言模型 RLHF 中的PPO算法

为什么大多数介绍大语言模型 RLHF 的文章,一讲到 PPO 算法的细节就戛然而止了呢?要么直接略过,要么就只扔出一个 PPO 的链接。然而 LLM x PPO 跟传统的 PPO 还是有些不同的呀。 其实在 ChatGPT 推出后的相当一段时间内,我一直在等…

el-table 表格多选(后端接口搜索分页)实现已选中的记忆功能。实现表格数据和已选数据(前端分页)动态同步更新。

实现效果:(可拉代码下来看:vue-demo: vueDemo) 左侧表格为点击查询调用接口查询出来的数据,右侧表格为左侧表格所有选择的数据,由前端实现分页。 两个el-table勾选数据联动更新 实现逻辑: el-…

javascript实现Stack(栈)数据结构

上一篇文章我们理解了List这种数据结构,知道了它的特点和一些使用场景,这篇文章我们就来看一下栈这种数据结构,这里的栈可不是客栈哦,哈哈 栈其实和List非常像,使用javascript实现都是基于数组来实现 尝试理解Stack …