🚀 个人主页 极客小俊
✍🏻 作者简介:程序猿、设计师、技术分享
🐋 希望大家多多支持, 我们一起学习和进步!
🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注

日期和时间函数
时间函数平常我们在开发中也会经常使用,项目中经常会遇到一些对时间进行处理的情况, 那么这个时候,我们就要选择一些时间函数来处理了!
以下我列举一些常用的时间函数
GETDATE() 函数
定义
GETDATE() 函数可以返回当前系统日期和时间
时区
它返回的时间是当前系统时区的时间,也就是说,它会根据我们所在地区或服务器的时区设置来返回相应的日期和时间。
使用场景
当你需要知道当前系统时区下的日期和时间时,可以使用这个函数
有的时候我们可以配合insert语句在插入数据的时候进行使用!
举个栗子
SELECT GETDATE() as '当前时间';
如图

GETUTCDATE() 函数
GETUTCDATE() 函数 和 GETDATE函数 一样也是获取时间,不过彼此之间有点小区别!
功能
返回当前的UTC协调世界日期和时间
时区
UTC是全球统一时间标准,这种时间不依赖于任何地区或服务器的时区设置。
所以无论我们在世界的哪个角落,GETUTCDATE()函数 返回的时间都是相同的!
使用场景
当你需要一个不受时区影响、全球统一的时间戳时,那么久可以考虑使用这个函数。
这在处理跨时区的数据时特别有用,因为它可以确保所有用户看到的时间戳都是一致的!
GETUTCDATE() 函数 和 GETDATE函数的区别
时区差异
GETDATE()函数 返回的是当前系统时区的时间
GETUTCDATE() 函数返回的是UTC时间。
全球一致性
GETUTCDATE() 函数提供的时间是全球一致的!
GETDATE()函数 返回的时间,可能因地区或服务器的时区设置而异!~
使用场景:
GETDATE()函数 更适合需要知道当前系统时区时间的场景。
GETUTCDATE()函数 则更适合需要全球统一时间戳的场景。
举个栗子
SELECT GETDATE() as '当前系统时间';
SELECT GETUTCDATE() as '全球UTC时间';
如图

DAY()函数
定义
这个函数用来从日期中提取天日的部分
举个栗子
假设有一个日期2024-11-15,那么DAY('2024-11-15')会返回15
SELECT DAY('2024-11-15') as '返回日'
如图

MONTH() 函数
定义
这个函数用来从日期中提取月的部分
举个栗子
假设有一个日期2024-11-15,那么MONTH('2024-11-15')会返回11
SELECT MONTH('2024-11-15') as '返回月份'
如图

YEAR() 函数
定义
这个函数用来从日期中提取年的部分
举个栗子
比如说: 有一个日期2024-11-15,那么YEAR('2024-11-15')会返回2024
SELECT YEAR('2024-11-15') as '返回年份'
如图

DATEADD() 函数
这个函数用于在给定的日期上添加或减少指定的时间间隔,并返回新的日期。
它允许我们通过指定的日期和时间单位(如年、月、日、小时等)来调整日期!
语法规则
DATEADD(datepart, number, date)
参数解释
datepart 指定要添加的时间间隔的单位,如(yyyy)、月(mm)、日(dd)
number 要添加的时间间隔的数量,可以是正数(表示添加)或负数(表示减少)
date 起始日期。
举个栗子
我们现在要生成一个在当前系统日期上增加10天后的日期数据!
如下
SELECT DATEADD(dd,10,GETDATE()) as '增加10天后的日期数据';
如图

那如果是在当前日期上减去10天的日期数据呢!
SELECT DATEADD(dd,-10,GETDATE()) as '减去10天后的日期数据';
如图

我们也可以来操作一下年和月
举个栗子
比如我们现在要生成十年前的今天!
SELECT DATEADD(yyyy,-10,GETDATE()) as '十年前的今日';
如图

DATEDIFF() 函数
这个函数的功能主要就是返回两个日期之间的差, 并返回指定的时间间隔的数量。
它允许我们来比较两个日期,并找出它们之间相差的天数、月数、年数!
语法规则
DATEDIFF(datepart, startdate, enddate)
参数解释
datepart:指定要计算差异的时间间隔的单位, 通常填写: yyyy年、mm月、dd日
startdate:起始日期。
enddate:结束日期。
举个栗子
从今天开始计算,距离2025年元旦节还有多少天?
SELECT DATEDIFF(dd, GETDATE(), '2025-1-1') AS '距离元旦节还有多少天';
如图

那我要算一下现在距离2050年还有多少年?
SELECT DATEDIFF(yyyy, GETDATE(), '2050-1-1') AS '距离2050年还有多少年';
如图

那我要算一下2024-1-1号到现在已经过了多少天了!
SELECT DATEDIFF(dd, '2024-1-1', GETDATE()) AS '今年我们已经过去了多少天';
如图

使用的时候,注意参数的变化和需求的分析!
DATENAME()函数
定义
这个函数用于返回指定日期中特定部分的名称
例如月份的名称: 一月、二月等 或星期的名称星期一、星期二等
语法规则
DATENAME(datepart, date)
参数解释
datepart 指定要返回的日期部分的名称!如年year、月month、日day、星期weekday等.
date 要提取名称的日期
举个栗子
比如: 我们想获取当前日期所在月份的名称!
SELECT DATENAME(month, GETDATE()) AS '当前是几月';
如图

我们也可以换成year试试看
SELECT DATENAME(year, GETDATE()) AS '当前是的年份';
如图

获取今天的是星期几?
SELECT DATENAME(weekday, GETDATE()) AS '今天是星期几';
如图

DATEPART() 函数
DATEPART()函数其实和DATENAME()函数一样!
它返回的是指定日期中特定部分的数字值,
比如:
月份的数字 1代表一月,2代表二月等)
星期的数字 1代表星期日,2代表星期一等,具体取决于数据库的设置!
最后的小练习
问题需求
比如: 我们现在想计算从上个月的第一天 到 当前日期之间相差的天数有多少天!
并获取当前日期所在星期的名称和月份的数字值
问题分析
首先我们要获取到上个月的第一天 , 这里我们可以使用DATEADD() 函数
通过两个嵌套的DATEADD函数来计算上个月的第一天
首先我们提取一个能够退回到第一天的负数值
如下
SELECT 1 - DAY(GETDATE());
如图

解释
DAY(GETDATE()) 获取当前日期是几号,也就是当前月的哪一天~
比如这里我们获取出来的是数值15, 然后我们采用一个小技巧在前面减去1
也就是我们看到的 1 - DAY(GETDATE()) 这相当于是 1 - 15 = -14这样我们就获取到了一个负值, 把这个负值再用作DATEADD函数,来提取从当前时间中获取到这个月的第一天的时间了!
其实这里的技巧就在于1 - DAY(GETDATE()) 来计算当前这个月的1号之前需要减去的天数,以便到达上个月的最后一天。
就像上面今天是15号,那么1 - 15是-14,但实际上我们不是真的减去14天来得到上个月的日期,而是用这个值来调整日期!
如下
SELECT DATEADD(day, 1 - DAY(GETDATE()), GETDATE());
DATEADD(day, 数字 GETDATE()) 这里是将当前日期添加或减去
如果数字是负数, 上一步计算出的天数, 本身我们的1 - DAY(GETDATE())计算结果是负数,所以实际上是向前移动日期!
如图

那么根据上面生成出来的时间条件,我们再次获取上一个月就可以看到第一天了
如下
SELECT DATEADD(mm,-1,DATEADD(day, 1 - DAY(GETDATE()), GETDATE())) as '上个月1号'
如图

实现获取到上一个月的第一天思路其实有很多!!
比如这样:
SELECT DATEADD(month, DATEDIFF(month, 0, GETDATE()) - 1, 0);
也是可以 直接获取到的!
所以,分析问题要学会拆分思维~~不管再大的问题,也可以解决, 你信不信! 😚😚
那么现在我们继续计算从上个月的第一天 到 当前日期之间相差的天数有多少天,不就可以直接使用DATEDIFF函数来计算了吗
如下
--根据上面生成出来的时间条件,我们再次获取上一个月就可以看到第一天了
SELECT DATEADD(mm,-1,DATEADD(day, 1 - DAY(GETDATE()), GETDATE())) as '上个月一号';
--获取当前时间
SELECT GETDATE() as '当前时间';
--计算从上个月的第一天 到 当前日期之间相差的天数有多少天
SELECT DATEDIFF(dd,DATEADD(mm,-1,DATEADD(day, 1 - DAY(GETDATE()), GETDATE())),GETDATE()) as '相差多少天'
如图

最后获取一下当前为星期几和几月份
-- 获取当前日期所在星期的名称
SELECT DATENAME(weekday, GETDATE()) AS '今天星期几';
--获取当前日期所在月份的数字值
SELECT DATEPART(month, GETDATE()) AS '当前是几月份';
如图



"👍点赞" "✍️评论" "收藏❤️"
欢迎一起交流学习❤️❤️💛💛💚💚

好玩 好用 好看的干货教程可以
点击下方关注❤️
微信公众号❤️
说不定有意料之外的收获哦..🤗嘿嘿嘿、嘻嘻嘻🤗!
🌽🍓🍎🍍🍉🍇


1011

被折叠的 条评论
为什么被折叠?



