SQL日期的计算合集

 更新时间:2023年10月24日 09:08:48   作者:幻影123!  
在SQL Server中,时间和日期是常见的数据类型,也是数据处理中重要的一部分,本文将介绍SQL Server中一些常用的时间和日期函数,以及它们的用法和示例,感兴趣的可以了解一下

前言

在SQL Server中,时间和日期是常见的数据类型,也是数据处理中重要的一部分。SQL Server提供了许多内置函数,用于处理时间和日期数据类型。这些函数可以帮助我们执行各种常见的任务,例如从日期中提取特定的部分,计算日期之间的差异,以及将日期和时间转换为不同的格式。本文将介绍SQL Server中一些常用的时间和日期函数,以及它们的用法和示例。

在这里插入图片描述

一些常用的函数

GetDate获取当天日期

select getdate()

DateFromParts自定义一个日期

select datefromparts(2023,2,28)

DateFormat转换日期格式

SELECT DATEFORMAT(YourDateColumn, 'YYYY-MM-DD')  AS FormattedDate FROM YourTable

DateAdd函数计算日期偏移后的新日期
SQL中的DATEADD函数用于在给定的日期上添加指定的时间间隔。它的语法如下:

DATEADD(datepart, number, date)

其中,datepart参数指定要添加的时间间隔类型,例如year(年)、quarter(季度)、month(月)、day(天)、hour(小时)、minute(分钟)或second(秒)。number参数指定要添加的时间间隔数量。date参数是要进行添加操作的日期。

下面是一些DateDADD函数使用的示例:

--1. 在当前日期上添加一天:

SELECT DATEADD(day, 1, GETDATE())

--2. 在当前日期上添加一个月:

SELECT DATEADD(month, 1, GETDATE())

--3. 在当前日期上添加一小时:

SELECT DATEADD(hour, 1, GETDATE())

--4. 在指定的日期上添加一周:

SELECT DATEADD(week, 1, '2021-01-01')

这些示例中,DATEADD函数会返回一个新的日期,该日期是在给定的日期上添加了指定的时间间隔后得到的。

DateDiff函数算时间差
在SQL中,DATEDIFF函数用于计算两个日期之间的时间间隔。它返回两个日期之间的差值,以指定的时间间隔单位为单位。

DATEDIFF函数的语法如下:

DATEDIFF(datepart, startdate, enddate)

其中,datepart参数指定要计算的时间间隔类型,例如year(年)、quarter(季度)、month(月)、day(天)、hour(小时)、minute(分钟)或second(秒)。startdate和enddate参数是要计算时间间隔的两个日期。

下面是一些示例:

  • 计算两个日期之间的天数差:
SELECT DATEDIFF(day, '2021-01-01', '2021-02-01')
  • 计算两个日期之间的小时差:
SELECT DATEDIFF(hour, '2021-01-01 10:00:00', '2021-01-01 12:00:00')
  • 计算两个日期之间的月数差:
SELECT DATEDIFF(month, '2021-01-01', '2022-01-01')

这些示例中,DATEDIFF函数会返回两个日期之间的差值,以指定的时间间隔单位为单位。

取日期的周、年、月、日等信息

DATEPART函数。DATEPART函数返回一个整数,它是日期的一部分,例如日,月和年。

以下是DATEPART函数的语法:

select DATEPART ( date_part , input_date ) 

DATEPART函数有两个参数:

date_part是要提取的日期的一部分(参见下表中的有效日期部分)。

input_date是提取日期部分的日期。
因此,获取一个日期的WeekNum和WeekDay可以这样

select DATEPART ( wk ,  getdate() )  as wk
select DATEPART ( weekday ,  getdate() )  as wkd

date_part可取值:

在这里插入图片描述

在最前面加上以下语句将每周第一天设置为周一

SET DATEFIRST 1
--
select DATEPART ( wk ,  getdate() )  as wk

--
select DATEPART ( weekday , getdate() )  as wkd

获取日期所属的当年的ISO标准周周序(ISO 标准周是一种将一年分为 52 或 53 周的时间计算方法,它是国际标准化组织(ISO)制定的一种时间标准。ISO 标准周的起始日期为每年的第一个周四,即该周的第一天为周四,最后一天为周三)

select DATEPART ( isowk ,  getdate() )  as iso_wk

计算本月第一天,上月第一天,去年本月第一天日期

sql中没有现成的函数实现,我们可以分别计算当前日期的天数d,然后往前移动d天,就可以算出来当前月的第一天的日期了。还一种思路,日期实际上就是数值,我们以0作为基础日期,0表示的日期1970年1月1日1时1分1秒,我们计算当前日期距离基础日期0过去了多少个月,然后在基础日期上移动相应的月份即可。
有了当前日期月份的第一天,移动一个月就得到了上个月的第一天日期,移动一年就得到了去年当月第一天的日期。

-- 本月第一天,0作为基础日期1970-01-01 00:00:00
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) AS '本月第一天';

-- 上个月第一天
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0) AS '上个月第一天';

-- 上个月最后一天
SELECT DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)) AS '上个月最后一天';

计算本周第一天,上周第一天以及上周同期

涉及到周的计算要复杂点,如何计算当前周的第一天,如何计算当前周的前一周的第一天。
对于第一个问题,我们思考先计算当前日期是周几,比方说周三,那说明周一需要往前推2天,我们先用dateparts计算WeekDay,然后用dateadd往前推就好了。
有了本周第一天,再推一个week就出来上周第一天的日期,接着加上这周的周几就能推出上周同期的日期。

DECLARE @Today DATE = GETDATE();
--设置周一为一周的第一天
SET DATEFIRST 1
-- 计算本周第一天
DECLARE @FirstDayOfWeek DATE = DATEADD(DAY, 1 - DATEPART(WEEKDAY, @Today), @Today);

-- 计算上周第一天
DECLARE @FirstDayOfLastWeek DATE = DATEADD(WEEK, -1, @FirstDayOfWeek);

-- 输出结果
SELECT @FirstDayOfWeek AS '本周第一天', @FirstDayOfLastWeek AS '上周第一天';

到此这篇关于SQL日期的计算合集的文章就介绍到这了,更多相关SQL日期计算内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MSSQL 检查所使用的语句是否符合标准

    MSSQL 检查所使用的语句是否符合标准

    标准SQL和T-SQL之间有很多区别——太多了,这里就不说了。还有,如果你在SQL Server上工作, 那么使用这些私有的扩展是有好处的。
    2009-11-11
  • SQL 判断字段类型语句

    SQL 判断字段类型语句

    SQL 判断字段类型语句实现代码。
    2009-09-09
  • SQL Server实现查询每个分组的前N条记录

    SQL Server实现查询每个分组的前N条记录

    这篇文章介绍了SQL Server实现查询每个分组的前N条记录,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 安装SQL2008时提示删除SQL2005Express工具的解决方法

    安装SQL2008时提示删除SQL2005Express工具的解决方法

    在安装SQL2008的时候,提示要删除SQL2005EXPRESS工具,在网上找了很多资料,终于找到一个比较方便的方法了,希望能帮助大家。
    2010-07-07
  • sql下三种批量插入数据的方法

    sql下三种批量插入数据的方法

    本文将介绍三种批量插入数据的方法,需要的朋友可以参考下
    2013-10-10
  • SQL Server 2000 清理日志精品图文教程

    SQL Server 2000 清理日志精品图文教程

    SQL Server 2000 数据库日志太大!如何清理SQL Server 2000的日志呢
    2012-07-07
  • SQL 窗口函数实现高效分页查询的案例分析

    SQL 窗口函数实现高效分页查询的案例分析

    SQL 各部分的逻辑执行顺序 注意到窗口函数的求值仅仅位于ORDER BY之前,而位于 SQL 的绝大部分之后。本文重点给大家介绍SQL 窗口函数实现高效分页查询功能,通过案例分析给大家介绍的很详细,感兴趣的朋友跟随小编一起看看吧
    2021-05-05
  • SQL Server数据汇总五招轻松搞定

    SQL Server数据汇总五招轻松搞定

    有些时候你想让SQL Server 返回一个聚集结果集合,而不是一个详细的结果集。SQL Server的GROUPBY子句,为你提供了一种聚合SQL Server数据的方式。GROUPBY子句允许你在一列或多列数据甚至是表达式上进行分组操作,在这篇文章中,我将讨论如何使用GROUPBY子句来汇总数据。
    2015-09-09
  • 分页 SQLServer存储过程

    分页 SQLServer存储过程

    分页 SQLServer存储过程...
    2006-08-08
  • SQL写法--行行比较

    SQL写法--行行比较

    行行比较是 SQL 规范,关系型数据库都应该支持这种写法,本文通过代码以及与其他写法进行比较来具体讲解这一规范,大家跟随小编一起来学习吧
    2021-08-08

最新评论