SQL Server 日期函数

2025年3月17日 | 阅读 10 分钟

日期和时间函数使我们能够有效地处理日期和时间数据。在处理数据库时,插入数据到表中时,日期和时间函数的格式应该匹配。在本文中,我们将深入探讨日期和时间函数。SQL Server 有许多内置函数,可以帮助我们从大量数据中筛选出有用的数据。它还有助于设计和维护大型数据库。

在 SQL Server 中,我们可以使用各种数据类型作为表中的日期。最流行的日期格式是 'YYYY-MM-DD' 和 'DD-MM-YYYYY.'。在某些情况下,我们还需要在数据库中保存日期和时间。在这些情况下,我们需要工具来单独访问时间和日期。这时 SQL Server 的时间和函数就很有用。还建议初学者在数据库中使用日期或时间时要谨慎,因为如果处理不当,很容易引发异常。

SQL Server 中的日期和时间格式

以下是 SQL Server 中使用的日期和时间格式

DATE: YYYY-MM-DD

DATETIME: YYYY-MM-DD HH: MI: SS

TIMESTAMP: YYYY-MM-DD HH: MI: SS

YEAR: YYYY 或 YY

注意:在数据库中创建新表时,我们会为每个列选择日期数据类型。

为什么我们需要日期和时间函数?

在 SQL Server 中,我们有各种日期和时间函数。这些函数是为了确保在创建和访问数据库时,日期和时间模块是可访问的。

SQL Server 根据以下类型对日期和时间函数进行分类

  • 返回系统日期和时间值
  • 返回日期和时间部分
  • 从其部分返回日期和时间值
  • 返回日期和时间差值
  • 返回修改日期和时间值
  • 设置或返回会话格式函数
  • 返回验证日期和时间值

返回系统日期和时间

所有系统日期和时间值均来自安装了 SQL Server 的计算机的操作系统。下表解释了所有系统日期和时间函数

函数描述
CURRENT_TIMESTAMP此函数用于获取当前的日期和时间值,不包括时区偏移。
GETUTCDATE此函数用于以整数形式获取当前的 UTC 日期和时间值。
GETDATE此函数用于获取安装了 SQL Server 的系统当前日期和时间。
SYSDATETIME此函数用于获取系统当前日期和时间,具有更高的秒小数精度,不包括时区偏移。
SYSUTCDATETIME此函数用于以整数形式获取基于 UTC 时间戳的系统当前日期和时间值。
SYSDATETIMEOFFSET此函数用于获取带有时区偏移的系统当前日期和时间。

让我们看一些系统日期和时间函数的例子。

示例 1: 此示例使用 CURRENT_TIMESTAMP() 函数查看系统的当前日期和时间,而不考虑输出中的时区。

执行此语句将返回以下输出

SQL Server Date Functions

示例 2: 此示例使用 GETDATE() 函数查看 SQL Server 运行所在的系统的当前日期和时间。

执行此语句将返回以下输出

SQL Server Date Functions

示例 3: 此示例使用 GETUTCDATE() 函数以整数形式查看基于 UTC 时间戳的系统当前日期和时间。

执行此语句将返回以下输出

SQL Server Date Functions

示例 4: 此示例使用 SYSDATETIME() 函数以毫秒为单位查看具有更高小数精度的系统当前日期和时间。

执行此语句将返回以下输出

SQL Server Date Functions

示例 5: 此示例使用 SYSUTCDATETIME() 函数以整数形式查看基于 UTC 时间戳的系统当前日期和时间。

执行此语句将返回以下输出

SQL Server Date Functions

示例 6: 此示例使用 SYSDATETIMEOFFSET() 函数查看带有时区偏移的系统当前日期和时间。

执行此语句将返回以下输出

SQL Server Date Functions

返回日期和时间部分

下表中列出的日期和时间函数用于以天、月、年、小时、分钟、秒、周、纳秒等为单位提取日期和时间的一部分。

函数描述
DATENAME此函数用于以字符串形式获取日期的一部分,如天、月或年。
DATEPART此函数用于以整数形式获取日期的一部分。
DAY此函数用于以整数形式获取输入日期的天值。
MONTH此函数用于以整数形式获取输入日期的月份值。
YEAR此函数用于以整数形式获取输入日期的年份值。

以下示例将实际演示这些日期函数。

示例 1: 此示例使用 DATENAME() 函数提取日期部分,如天、月或年。

执行该语句将返回以下输出。在这里,我们看到该函数将日期提取为三个部分:天、月,形式为字符串。

SQL Server Date Functions

示例 2: 此示例使用 DATEPART() 函数以整数形式提取日期部分,这使其与 DATENAME() 函数不同。

执行该语句将返回以下输出。在这里,我们看到该函数将日期以整数形式提取为三个部分:天、月和年。

SQL Server Date Functions

示例 3: 此示例使用 YEAR() 函数仅提取输入日期的年份部分。

执行该语句将仅以整数形式返回日期的年份部分。

SQL Server Date Functions

示例 4: 此示例使用 MONTH() 函数仅提取输入日期的月份部分。

执行该语句将仅以整数形式返回日期的月份部分。

SQL Server Date Functions

示例 5: 此示例使用 DAY() 函数仅提取输入日期的天部分。

执行该语句将仅以整数形式返回日期的天部分。

SQL Server Date Functions

返回日期和时间差值

下表中列出的函数用于提取日期之间的差异。

函数描述
DATEDIFF此函数用于获取两个输入日期值在指定日期部分的差异。

示例: 此示例使用 DATEDIFF() 函数并显示起始日期表达式和结束日期表达式之间的差异。

执行该语句将返回以下输出

SQL Server Date Functions

返回修改日期和时间值

我们可以使用以下一组 SQL Server 日期函数来操作或更改系统/输入时间戳值。

函数描述
DATEADD此函数用于将整数值添加到输入日期的某个日期部分,并返回新的日期值。
EOMONTH此函数用于获取指定日期和可选偏移量的月份的最后一天。
SWITCHOFFSET此函数用于修改 datetimeoffset 值的时区偏移量,同时保留 UTC 值。
TODATETIMEOFFSET此函数用于将 DATETIME2 值更改为 DATETIMEOFFSET 值。

以下示例将实际演示这些日期函数。

示例 1: 此示例使用 DATEADD() 函数,在向日期部分添加整数值后返回新的日期值。

执行此语句将返回以下输出。在这里,我们看到函数首先在 result1 中添加一个秒值,然后在 result2 中添加一个天值以显示下一个日期。

SQL Server Date Functions

示例 2: 此示例使用 EOMONTH() 函数并返回指定日期的月份的最后一天。

执行此语句将返回以下输出。在这里,我们看到即使我们传入闰年日期,该函数仍返回正确的结果。

SQL Server Date Functions

示例 3: 此示例使用 SWITCHOFFSET() 函数将存储的时区偏移值更改为新的时区偏移。

首先,我们将创建一个包含 DATETIMEOFFSET 列的表 'testdate',并使用以下语句向其中插入一个值。

如果用 SELECT 语句验证,它会在表中显示 '2020-09-20 07:45:50.7134500 -05:00' 值。现在,我们将使用 SWITCHOFFSET() 函数将时区切换到 -8:00。

我们将获得以下输出

SQL Server Date Functions

示例 4: 此示例使用 TODATETIMEOFFSET() 函数,在 DATETIME2 值之后,根据指定时区以本地时间返回新的日期值。

执行此语句将返回以下输出。在这里,我们看到第一个结果将日期和时间的时区偏移更改为 -08:00。第二个结果将当前时区更改为 -180 分钟。

SQL Server Date Functions

从其部分构造日期和时间

我们可以使用 SQL Server 中的以下日期函数从其部分构造日期和时间。

函数描述
DATEFROMPARTS此函数用于从指定的日、月或年获取日期值。
DATETIME2FROMPARTS此函数用于从日期和时间参数获取 DATETIME2 值。
DATETIMEOFFSETFROMPARTS此函数用于从日期和时间参数获取 DATETIMEOFFSET 值。
TIMEFROMPARTS此函数用于从时间部分获取具有精度的时间值。

让我们通过示例来实际解释这些函数。

示例 1: 此示例使用 DATEFROMPARTS() 函数从日、月和年值构造日期。

执行此语句将显示以下输出。在这里,我们看到 result1 返回了日期,但 result2 返回 NULL,因为月份参数为 NULL。

SQL Server Date Functions

示例 2: 此示例使用 DATETIME2FROMPARTS() 函数从日、月、年、小时、分钟、秒、小数和精度值构造 datetime2 值。

执行此语句将显示以下输出。在这里,我们看到 result1 返回了 datetime 值,但 result2 返回 NULL,因为月份参数为 NULL。

SQL Server Date Functions

示例 3: 示例 3: 此示例使用 DATETIMEOFFSETFROMPARTS() 函数从日期和时间值构造 datetimeoffset 值。

执行此语句将显示以下输出。在这里,我们看到 result1 返回了 datetimeoffset 值,但 result2 返回 NULL,因为年份参数为 NULL。

SQL Server Date Functions

示例 4: 此示例使用 TIMEFROMPARTS() 函数为指定的时间和精度值构造时间值。

执行此语句将显示以下输出。在这里,我们看到 result1 返回不带小数的时间值,但 result2 返回带小数的时间值。由于指定的精度为 2,因此小数部分的值计算为 5/100 或 0.05 秒。

SQL Server Date Functions

日期和时间值验证

我们可以使用以下日期函数来检查指定的日期格式在 SQL Server 中是否有效。有效的日期格式是 yyyy-mm-dd。

函数描述
ISDATE此函数用于检查输入的日期是否遵循日期、时间或 datetime 值的标准格式。

示例: 此示例使用 ISDATE() 函数检查输入的日期是否遵循标准格式。如果日期有效,则函数返回 1。如果日期格式不同,则函数返回 0。

执行此语句将显示以下输出。在这里,我们看到 result1 代表有效的日期数据,因为它返回 1。result2 代表无效日期,因为它返回 0。

SQL Server Date Functions

这是另一个检查有效 datetime 表达式的示例。

这是输出

SQL Server Date Functions

设置或返回会话格式函数

我们可以使用以下函数为特定会话设置日期和时间值。

函数描述
@@DATEFIRST此函数用于获取会话 SET DATEFIRST 的当前值。
SET DATEFIRST此函数用于将星期几设置为 1 到 7 之间的数字。
SET DATEFORMAT此函数用于确定输入 datetime 或 smalldatetime 数据的日期部分(月、日、年)的顺序。
@@LANGUAGE此函数用于获取当前使用的语言名称。
SET LANGUAGE此函数用于设置系统和系统消息的语言。

以下示例将实际解释这些函数。

示例 1: 此函数使用 @@DATEFIRST() 函数指定星期中的第一天。

执行此语句将设置 星期二 为一周中的第一天。

SQL Server Date Functions

示例 2: 此函数使用 DATEFORMAT() 函数指定日期的顺序。

执行此语句将返回以下输出。

SQL Server Date Functions

结论

此示例将解释日期和时间函数的完整概述及示例。这些函数在 SQL Server 中是预定义的,可用于在查询中提取所需的任何详细信息。