【你也能从零基础学会网站开发】SQL Server 2000 中的这些内置系统函数你都见过吗? 《第二节: 日期和时间函数》

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

日期和时间函数

时间函数平常我们在开发中也会经常使用,项目中经常会遇到一些对时间进行处理的情况, 那么这个时候,我们就要选择一些时间函数来处理了!

以下我列举一些常用的时间函数

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 '当前是几月份';

如图

"👍点赞" "✍️评论" "收藏❤️"

大家的支持就是我坚持下去的动力!

如果以上内容有任何错误或者不准确的地方,🤗🤗🤗欢迎在下面 👇👇👇 留个言指出、或者你有更好的想法,
欢迎一起交流学习❤️❤️💛💛💚💚

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值