介绍
在数据库中,经常需要对日期进行加减操作。SQL Server 提供了一些内置函数和语法来解决这个问题。这篇文章将介绍一些常见的日期操作,包括日期加减、日期差异计算和日期格式化。
日期加减操作
使用 DATEADD() 函数进行日期加减
在 SQL Server 中,可以使用 DATEADD() 函数对日期进行加减操作。该函数的语法如下:
DATEADD(datepart, number, date)
其中,datepart 参数可以是年、季度、月、日、周、小时、分钟、秒等。
number 参数是要添加的数量。对于加法操作,数字应该是正的,对于减法操作,应该是负的。
date 参数是一个有效的日期或时间戳。
下面是一个几个示例:
增加或减少指定数量的年份
要增加或减少指定数量的年份,可以使用以下语法:
SELECT DATEADD(year, 5, GETDATE());
上面的示例会返回从当前日期开始加上 5 年后的日期。
SELECT DATEADD(year, -1, GETDATE());
上面的示例会返回从当前日期开始减去 1 年后的日期。
增加或减少指定数量的月份
要增加或减少指定数量的月份,可以使用以下语法:
SELECT DATEADD(month, 3, GETDATE());
上面的示例会返回从当前日期开始加上 3 个月后的日期。
SELECT DATEADD(month, -2, GETDATE());
上面的示例会返回从当前日期开始减去 2 个月后的日期。
增加或减少指定数量的天数
要增加或减少指定数量的天数,可以使用以下语法:
SELECT DATEADD(day, 7, GETDATE());
上面的示例会返回从当前日期开始加上 7 天后的日期。
SELECT DATEADD(day, -14, GETDATE());
上面的示例会返回从当前日期开始减去 14 天后的日期。
增加或减少指定数量的小时数
要增加或减少指定数量的小时数,可以使用以下语法:
SELECT DATEADD(hour, 2, GETDATE());
上面的示例会返回从当前日期开始加上 2 小时后的日期。
SELECT DATEADD(hour, -1, GETDATE());
上面的示例会返回从当前日期开始减去 1 小时后的日期。
增加或减少指定数量的分钟数
要增加或减少指定数量的分钟数,可以使用以下语法:
SELECT DATEADD(minute, 15, GETDATE());
上面的示例会返回从当前日期开始加上 15 分钟后的日期。
SELECT DATEADD(minute, -30, GETDATE());
上面的示例会返回从当前日期开始减去 30 分钟后的日期。
增加或减少指定数量的秒数
要增加或减少指定数量的秒数,可以使用以下语法:
SELECT DATEADD(second, 45, GETDATE());
上面的示例会返回从当前日期开始加上 45 秒后的日期。
SELECT DATEADD(second, -20, GETDATE());
上面的示例会返回从当前日期开始减去 20 秒后的日期。
使用DATEDIFF()函数计算日期差异
要计算两个日期之间的差异,可以使用DATEDIFF()函数。该函数的语法如下:
DATEDIFF(datepart, startdate, enddate)
其中,datepart参数可以是年、季度、月、日、周、小时、分钟或秒。
startdate和enddate 是有效的日期或时间戳。
以下示例演示如何计算两个日期之间的天数差异:
DECLARE @Date1 DATETIME, @Date2 DATETIME
SET @Date1 = '2022-01-01'
SET @Date2 = '2022-02-01'
SELECT DATEDIFF(day, @Date1, @Date2) AS 'Days Difference'
上面的示例将返回 31,因为第一个日期是一月一日,第二个日期是二月一日,它们之间有 31 天的差异。
日期格式化
使用CONVERT()函数对日期进行格式化
在 SQL Server 中,可以使用CONVERT()函数来格式化日期。该函数的语法如下:
CONVERT(datatype, expression, style)
datatype是要转换成的数据类型。
expression是要转换的值。
style是要使用的日期格式的编码值。
下面是一些示例:
将日期转换为日期字符串
以下示例演示如何将日期转换为日期字符串:
SELECT CONVERT(VARCHAR(10), GETDATE(), 101) AS [MM/DD/YYYY];
上面的示例将返回当前日期的日期字符串,格式为 MM/DD/YYYY。
将日期转换为时间戳
以下示例演示如何将日期转换为时间戳:
SELECT CONVERT(BIGINT, CONVERT(DATETIME, '01-01-2022')) AS 'Timestamp';
上面的示例将 2022 年一月一日的日期转换为从 1900 年一月一日零点开始的毫秒数。
将时间戳转换为日期
以下示例演示如何将时间戳转换为日期:
SELECT DATEADD(ms, 1713242141, '1900-01-01') AS 'Date';
上面的示例将之前转换的时间戳转换回日期。
结论
SQL Server 提供了许多内置函数和语法来处理日期。可以使用 DATEADD() 函数来增加或减少日期中的任意部分,使用 DATEDIFF() 函数计算两个日期之间的差异,使用 CONVERT() 函数将日期格式化为任意字符串或时间戳。