Sql Server里那些常用的时间处理函数到底怎么用啊,搞不懂就看看这篇吧
- 问答
- 2025-12-29 11:15:54
- 3
根据网络技术博客和Microsoft SQL Server官方文档常见问题解答部分整理)
你是不是也觉得SQL Server里处理时间日期的时候特别头大?一会儿要算两个日期差多少天,一会儿又要提取年份月份,函数名字还长得差不多,用起来真是晕头转向,别急,这篇东西就是帮你把这些常用的时间处理函数捋清楚,咱们用大白话和例子来说明白。
第一部分:最基础,先搞清楚怎么拿到“这一刻
干任何事都得有个起点,处理时间也一样,SQL Server给你提供了好几个“的版本:
-
GETDATE():这是最常用的老黄牛,它就是返回数据库服务器当前所在的日期和时间,精确到小数点后面3位(毫秒),比如你执行
SELECT GETDATE(),它可能返回2023-10-27 15:30:45.123这样的结果,你电脑的时间不准没关系,它看的是服务器的钟。 -
SYSDATETIME():这个是GETDATE()的升级版,精度更高,能精确到小数点后面7位(100纳秒),如果你对时间精度要求特别高,比如要记录非常精确的操作时序,就用它,一般日常业务,GETDATE()足够了。

-
GETUTCDATE() 和 SYSUTCDATETIME():这俩哥们儿返回的不是当地时间,而是“世界协调时间”(UTC),也就是格林威治标准时间,比如你的数据库服务器在北京(东八区),
SELECT GETUTCDATE()返回的时间会比GETDATE()慢8个小时,当你需要存储一个全球统一的时间标准时,它们就派上用场了。
第二部分:拆解时间,你想要哪部分就取哪部分
一个完整的日期时间像一个大礼包,有时候我们只需要里面的某一样东西,比如只要年份,或者只要小时数。
-
YEAR(日期)、MONTH(日期)、DAY(日期):这三个函数最简单直接,你把一个日期值塞给它,它就把对应的年份、月份、日子中的日数单独抽出来给你。
SELECT YEAR('2023-10-27')返回2023。SELECT MONTH('2023-10-27')返回10。SELECT DAY('2023-10-27')返回27。
-
DATEPART(部分参数, 日期):这是个“万能钥匙”,想要什么部分自己说,第一个参数告诉它你要什么,第二个参数是日期。
SELECT DATEPART(year, '2023-10-27 15:30:45')返回2023。SELECT DATEPART(month, '2023-10-27 15:30:45')返回10。SELECT DATEPART(day, '2023-10-27 15:30:45')返回27。SELECT DATEPART(hour, '2023-10-27 15:30:45')返回15。SELECT DATEPART(weekday, '2023-10-27')返回星期几(默认周日是1,周一是2,以此类推)。 这个函数很强大,但记住参数要用英文字符串,year','hour','minute'等。 -
DATENAME(部分参数, 日期):这个和DATEPART很像,但有时候返回的不是数字,而是名字,最常用的就是取星期几和月份的名字。
SELECT DATENAME(weekday, '2023-10-27')可能会返回'Friday'(根据数据库语言设置可能是中文‘星期五’)。SELECT DATENAME(month, '2023-10-27')可能会返回'October'。
第三部分:时间的计算,加减和差值
这是业务逻辑里最常用的部分了,比如计算会员还有几天到期,或者某个日期30天后是哪天。

-
DATEADD(部分参数, 增量, 日期):给一个日期加上一段时间,三个参数分别是:要加的单位(比如天、月、年)、加多少、从哪个日期开始加。
SELECT DATEADD(day, 10, '2023-10-27')就是在10月27号上加10天,返回2023-11-06。SELECT DATEADD(month, -2, '2023-10-27')就是减去2个月,返回2023-08-27。SELECT DATEADD(hour, 5, '2023-10-27 10:00:00')就是加5小时,返回2023-10-27 15:00:00。 -
DATEDIFF(部分参数, 开始日期, 结束日期):计算两个日期之间相差多少个指定的时间单位,注意,它是计算“跨越”的边界数。
SELECT DATEDIFF(day, '2023-10-01', '2023-10-27')相差26天,返回26。SELECT DATEDIFF(month, '2023-01-15', '2023-10-27')虽然1月15到10月27日实际天数远超过9个月,但它只计算从1月到10月“跨越”了多少个“月”这个单位,结果是9。SELECT DATEDIFF(year, '2022-12-31', '2023-01-01')只差一天,但跨了一个“年”的边界,所以返回1,这个特性在使用时要特别注意。
第四部分:格式转换,把日期变成你想要的字符串样子
数据库里存储的日期格式可能不是你最终展示给用户看的样子,这时候就需要转换。
-
CONVERT(数据类型, 日期, 样式代码):这是最常用的格式化函数,样式代码是一个数字,代表不同的显示格式。
SELECT CONVERT(VARCHAR, GETDATE(), 23)只显示日期部分,格式为YYYY-MM-DD,如2023-10-27。SELECT CONVERT(VARCHAR, GETDATE(), 112)也是日期,但格式是YYYYMMDD,如20231027。SELECT CONVERT(VARCHAR, GETDATE(), 108)只显示时间部分,格式为HH:MI:SS,如15:30:45。SELECT CONVERT(VARCHAR, GETDATE(), 120)是完整的日期时间,标准格式YYYY-MM-DD HH:MI:SS,如2023-10-27 15:30:45。 样式代码有很多,可以查一下常用的几个就行。 -
FORMAT(日期, 格式字符串):这个函数更强大更直观,像C#里的格式化一样,你可以用自定义的格式字符串。
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd')结果同2023-10-27。SELECT FORMAT(GETDATE(), 'dd/MM/yyyy')结果如27/10/2023。SELECT FORMAT(GETDATE(), 'dddd, MMMM dd, yyyy')结果可能如Friday, October 27, 2023。 这个函数用起来很灵活,但要注意性能,因为它比CONVERT要慢一些,如果处理大量数据要谨慎使用。
好了,以上就是SQL Server里最常用的一些时间日期处理函数,别看数量不少,其实分类后就清晰了:获取当前时间、拆解日期、计算日期、格式化输出,多在实际的SQL语句里用几次,配合具体的例子,很快就能上手了,下次再遇到时间处理的问题,翻出这篇来看看,对照着写,准没错。
本文由凤伟才于2025-12-29发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/70617.html
