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

day009--mysql中的日期函数

目录

一,日期与时间基础函数

二,日期与时间戳的转换

 三,获取日期里面的月份,星期,星期数,天数

1,分被获取输入的date日期的年,月,日

2,分别获取获取输入的date日期的时,分,秒 

3,获取月份名及星期名

4,获取该日期对应的季度

5,获取日期是一周中的第几天

6,获取该日期是一年或一月中的第几天,第几周

四,时间和秒钟转换

1,time_to_sec(time)

 2,sec_to_time(sec)

 五,计算日期和时间

1,date_add(datetime,interval num type)

2,date_sub(datetime,interval num type)

3,addtime(time1,time2)

4,subtime(time1,tim2)

5,datediff(date1,date2)

6,timediff(time1,time2)

7,time_days(n)

8,to_days(date)

9,last_day(date)

10,makedate(year,n)

11,maketime(hour,minute,second) 

 12,period_add(time,n)


 

一,日期与时间基础函数

  1. curdate()--只返回当前日期----年-月-日
  2. curtime()--只返回当前时间----时:分:秒
  3. now()--返回当前系统的日期和时间----年-月-日  时:分:秒
  4. utc_date()--返回世界标准时间的日期----年-月-日
  5. utc_time()--返回世界标准时间的时间----时:分:秒
select curdate(),curtime(),now(),utc_date(),utc_time();

二,日期与时间戳的转换

为了更加直观以下的日期均采用全称输入,可以直接使用now()函数获取系统时间

  1. unix_timestamp()--以unix时间戳的形式返回当前的日期
  2. unix_timestamp(date)--将date时间以unix时间戳的形式返回
  3. from_unixtime(timestamp)--将unix时间戳的时间转换成普通格式的时间

unix时间戳是从1970年1月1日0时0分0秒开始计算秒数的一个数值

select  unix_timestamp(),unix_timestamp('2022-08-26 10:29:01'),from_unixtime(1661483005);

 三,获取日期里面的月份,星期,星期数,天数

1,分被获取输入的date日期的年,月,日

  1.  year(date):获取年
  2. month(date):获取月
  3. day(day):获取日

select year('2022-08-26 10:29:01'),month('2022-08-26 10:29:01'),day('2022-08-26 10:29:01');

2,分别获取获取输入的date日期的时,分,秒 

  1. hour(date):获取date时间里面的时
  2. minute(date):获取date时间里面的分
  3. second(date):获取到date时间里面的秒

3,获取月份名及星期名

  1. monthname(date):获取月份名(英文表示)
  2. dayname(date):获取星期名(英文表示)

4,获取该日期对应的季度

1,quarter(date):可以获取到我们输入的日期对应的季度

【quarter有:把........四等分的意思。

传统上我们习惯性的就是第一季度从1到3月份,第二季度从4到6月份,第三季度从7到9月份,第四季度从10到12月份,如果学过地理的可能会不大习惯,因为如果严格按照中国维度划分的话,3月20号春分,预示着3到5月份为第一季度。以此类推。不过我们也说了“如果按照中国的维度划分”,而我们都知道mysql是瑞典人开发的,不看我们中国的维度,因此季度的划分就是按照:1到3月份为第一季度,并以此类推下来的。】

如上,我们的8月份就是第三季度。

5,获取日期是一周中的第几天

我们可以使用两个函数来返回我们输入的date日期是一周中的第几天,不过我比较喜欢dayofweek()这个函数,因为它的一周就是按照西方的周日就是一周的开始(因此表示为1)标准来的,而weekday函数的周一却是使用0来进行表示。

  1. weekday(date):返回该日期位于周几---0表示周一......6表示周日
  2. dayofweek(date):返回该日期位于周几--1表示周日.....7表示周六

 在日期为:2022-08-26时,为周五,因此weekday函数返回的数字为4(5-1),dayofweek返回6(5+1);

6,获取该日期是一年或一月中的第几天,第几周

  1. weekofyear(date)--返回该date日期在一年中是第几周
  2. dayofyear(date)--返回该date日期在一年中是第几天
  3. dayofmonth(date)--返回该date日期位于所在月份的第几天 

四,时间和秒钟转换

1,time_to_sec(time)

该函数我们可以翻译为:time时间to转换到second秒钟,因此我们需要往该函数传入的参数为时间:

 2,sec_to_time(sec)

该函数的使用与time_to_sec(time)函数对应,是将秒数转换成时间,如下:

 五,计算日期和时间

1,date_add(datetime,interval num type)

该函数看名字就知道是关于日期加减的,函数里面的参数:

  • datetime:要进行加减的日期
  • interval:翻译为间隔,是个关键字。
  • num:正数表示在日期的基础上加,负数表示减
  • type:表示要加或减的是年,月,日,时,分,还是秒。如果是对时做修改,那么type需要写入hour。

mysql> select date_add(now(),interval 1 year);   #在当前日期的基础上再加一年
+---------------------------------+
| date_add(now(),interval 1 year) |
+---------------------------------+
| 2023-09-11 21:32:43             |
+---------------------------------+
1 row in set (1.73 sec)

mysql> select date_add(now(),interval 1 month);
+----------------------------------+
| date_add(now(),interval 1 month) |
+----------------------------------+
| 2022-10-11 21:32:53              |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select date_add(now(),interval 1 day);
+--------------------------------+
| date_add(now(),interval 1 day) |
+--------------------------------+
| 2022-09-12 21:33:01            |
+--------------------------------+
1 row in set (0.29 sec)

mysql> select date_add(now(),interval -1 day);    #在当前日期的基础上减一年
+---------------------------------+
| date_add(now(),interval -1 day) |
+---------------------------------+
| 2022-09-10 21:37:31             |
+---------------------------------+
1 row in set (1.75 sec)

type也可以是两个日期加或减,如:

  • 年月:year_month
  • 日时:day_hour
  • 日分:day_minute
  • 日秒:day_second
  • 时分:hour_minute
  • 时秒:hour_second
  • 分秒:minute_second
mysql> select date_add(now(),interval 1 year_month);   #年份和月份同时加1
+---------------------------------------+
| date_add(now(),interval 1 year_month) |
+---------------------------------------+
| 2022-10-11 23:09:24                   |
+---------------------------------------+
1 row in set (0.04 sec)

mysql> select date_add(now(),interval 1 day_hour);     #天数和小时同时加1
+-------------------------------------+
| date_add(now(),interval 1 day_hour) |
+-------------------------------------+
| 2022-09-12 00:16:47                 |
+-------------------------------------+
1 row in set (0.00 sec)

mysql> select date_add(now(),interval 1  minute_second);   #分钟和秒数同时加1
+-------------------------------------------+
| date_add(now(),interval 1  minute_second) |
+-------------------------------------------+
| 2022-09-11 23:17:02                       |
+-------------------------------------------+
1 row in set (0.03 sec)

 

 中间的num的值也不是只能写一个,我们可以分别指定增加的数,如下,我们如果先要年加2,月加5:

mysql> select  now(), date_add(now(),interval  '2_5' year_month);

 看到这里大家可能会有疑惑,年那里明明写的是加2,按理来说应该是2024的结果,能够有这个问题的表示还是有认真的看的,这个问题的原因是我们的月份进1了,因为此时我们的月份为9月份,然后我们又让月份加4,变成了来年的1月份,我们的年份自然就要再加1。

 2,date_sub(datetime,interval num type)

该函数与date_add函数里面传入的num为负数时的效果一样,都是表示在当前日期的基础上减去相应的日期。如下:

所以我们可以直接使用date_add函数即可。

3,addtime(time1,time2)

该函数返回的是time1加上time2的时间如果time2为一个数字时,代表的时秒,可以为负数。

mysql> select now(),addtime(now(),-22);

4,subtime(time1,tim2)

返回time1减去time2后的时间,time2可以是数字代笔秒数,也可以是负数(正负数都一样的结果)。

 5,datediff(date1,date2)

diff可以理解为different的缩写,即不同的意思。

该函数返回date1到date2之间间隔的天数:

mysql> select datediff(now(),date_add(now(),interval '1_1' year_month));

6,timediff(time1,time2)

timediff函数的使用与datediff差不多,只是timediff返回的是时间间隔:

mysql> select timediff(now(),date_add(now(),interval '1_1' year_month));

7,time_days(n)

该函数返回从0000年1月1日起,n天后的日期【这里需要注意的就是当我们的n小于366时,返回的结果为0年0月0日(具体为啥我也不是很能够理解,如果知道原因的请在评论区回复,谢谢!)】

8,to_days(date)

返回日期date距离0年1月1日的天数

9,last_day(date)

返回date所在月份的最后一天的日期

10,makedate(year,n)

针对给定年份与所在年份中的天数返回一个日期

11,maketime(hour,minute,second) 

将给定的时分秒组合成时间并返回

 12,period_add(time,n)

返回time加上n后的时间

 

相关文章:

  • sql语句 如果为空值显示为0
  • 【MySQL数据库】- 多表查询
  • C++文件服务器项目—数据库表设计 与 后端接口设计—6
  • 聊聊Redis的数据热点问题
  • 猿创征文|瑞吉外卖——管理端_员工管理
  • springcloud springboot nacos版本对应
  • Windows安装Visual Studio2019+OpenCV配置
  • 单片机——硬件系统
  • jenkins一键部署搭建
  • 【022】Vue+Springboot+mysql汽车销售系统课设(含源码、数据库、运行教程、实验报告)
  • 【Golang开发面经】字节跳动(三轮技术面)
  • SpringCloud Stream详解
  • 【苹果家庭推送iMessage位置推送】群发安装软件获取home目录路径的函数: NSString *homeDir = NSHomeDirectory()
  • 【Python基础入门7】程序的组织结构、range函数及pass语句
  • 基于hough霍夫变换的铁栏栅断裂处的检测算法matlab仿真
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Angular4 模板式表单用法以及验证
  • laravel with 查询列表限制条数
  • leetcode-27. Remove Element
  • Making An Indicator With Pure CSS
  • mockjs让前端开发独立于后端
  • SOFAMosn配置模型
  • uni-app项目数字滚动
  • 从零开始学习部署
  • 分布式任务队列Celery
  • 计算机常识 - 收藏集 - 掘金
  • 区块链分支循环
  • 软件开发学习的5大技巧,你知道吗?
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 线上 python http server profile 实践
  • 追踪解析 FutureTask 源码
  • const的用法,特别是用在函数前面与后面的区别
  • zabbix3.2监控linux磁盘IO
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (图)IntelliTrace Tools 跟踪云端程序
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)ABI是什么
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Core 和 .NET Framework 中的 MEF2
  • .Net Redis的秒杀Dome和异步执行
  • .NET 设计模式初探
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .net程序集学习心得
  • .net反编译工具
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • /etc/skel 目录作用
  • /etc/sudoers (root权限管理)
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [ 转载 ] SharePoint 资料
  • [android] 看博客学习hashCode()和equals()
  • [C++从入门到精通] 14.虚函数、纯虚函数和虚析构(virtual)
  • [codevs 1296] 营业额统计