如何使用 CAST() 在 SQL Server 中转换日期格式

发布于

在 SQL Server 中,可以使用该函数将日期值从一种日期数据类型转换为另一种日期数据类型(或将任何其他数据类型转换为任何其他数据类型)。但是,这不是 T-SQL 工具箱中用于在数据类型之间进行转换的唯一函数。CONVERT()

该函数是 ANSI SQL 标准的一部分,它执行了大部分工作。因此,在许多情况下,您可以选择更喜欢使用这些功能中的哪一个。CAST()``CONVERT()

许多数据库专业人员更喜欢,因为它是ANSI SQL标准的一部分,但是,其他人更喜欢T-SQL的实现提供的额外功能(例如能够提供日期样式)。CAST()``CONVERT()

无论如何,本文都提供了使用 在不同日期格式之间进行转换的示例。CAST()

语法

语法是这样的:

CAST ( expression AS data_type [ ( length ) ] )

这些参数定义如下:

expression

任何有效的表达式。

data_type

目标数据类型。这包括 xml、bigint 和 sql_variant。不能使用别名数据类型。

length

一个可选整数,它指定目标数据类型的长度。默认值为 。30

示例 1 – 将 SYSDATETIME() 转换为日期

在此示例中,我们使用函数生成当前日期/时间,并将返回值转换为日期数据类型。SYSDATETIME()

请注意,将其值生成为 datetime2(7) 数据类型,因此我们将其从该数据类型转换为另一种数据类型。SYSDATETIME()

SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS date) AS Converted;

输出:

+-----------------------------+-------------+
| Original                    | Converted   |
|-----------------------------+-------------|
| 2018-06-07 00:15:32.9265884 | 2018-06-07  |
+-----------------------------+-------------+

示例 2 – 将 SYSDATETIME() 转换为 smalldatetime

在此示例中,我们将日期转换为 smalldatetime 数据类型。

SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS smalldatetime) AS Converted;

输出:

+-----------------------------+---------------------+
| Original                    | Converted           |
|-----------------------------+---------------------|
| 2018-06-07 00:16:05.5142017 | 2018-06-07 00:16:00 |
+-----------------------------+---------------------+

示例 3 – 将 SYSDATETIME() 转换为日期时间偏移量

在此示例中,我们将日期转换为日期时间偏移量数据类型。

SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS datetimeoffset) AS Converted;

输出:

+-----------------------------+------------------------------------+
| Original                    | Converted                          |
|-----------------------------+------------------------------------|
| 2018-06-07 10:19:23.9457462 | 2018-06-07 10:19:23.9457462 +00:00 |
+-----------------------------+------------------------------------+

示例 4 – 将 SYSDATETIME() 转换为时间

您不限于显示值的日期部分。还可以将其转换为时间数据类型,以便仅返回时间部分。示例如下:

SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS time) AS Converted;

输出:

+-----------------------------+------------------+
| Original                    | Converted        |
|-----------------------------+------------------|
| 2018-06-07 00:20:21.5829364 | 00:20:21.5829364 |
+-----------------------------+------------------+

示例 5 – 将 SYSDATETIMEOFFSET() 转换为日期

下面是使用不同函数生成原始日期/时间值的示例:

SELECT SYSDATETIMEOFFSET() AS Original, CAST(SYSDATETIMEOFFSET() AS date) AS Converted;

输出:

+------------------------------------+----------------------+
| Original                           | Converted            |
|------------------------------------+----------------------|
| 2018-06-07 10:21:16.3617030 +10:00 | 2018-06-07           |
+------------------------------------+----------------------+

示例 6 – 从数据库查询转换

下面是转换从 WideWorldImporters 示例数据库中的列检索的日期的示例:

USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CAST(LastEditedWhen AS date) AS ‘Converted’ FROM Sales.CustomerTransactions;

输出:

+-----------------------------+-------------+
| LastEditedWhen              | Converted   |
|-----------------------------+-------------|
| 2013-01-02 11:30:00.0000000 | 2013-01-02  |
| 2013-01-03 11:30:00.0000000 | 2013-01-03  |
| 2013-01-04 11:30:00.0000000 | 2013-01-04  |
| 2013-01-05 11:30:00.0000000 | 2013-01-05  |
| 2013-01-06 11:30:00.0000000 | 2013-01-06  |
| 2013-01-08 11:30:00.0000000 | 2013-01-08  |
| 2013-01-09 11:30:00.0000000 | 2013-01-09  |
| 2013-01-10 11:30:00.0000000 | 2013-01-10  |
| 2013-01-11 11:30:00.0000000 | 2013-01-11  |
| 2013-01-12 11:30:00.0000000 | 2013-01-12  |
+-----------------------------+-------------+

我还写了一篇文章,展示了如何使用与上面相同的示例使用该函数在日期格式之间进行转换。CONVERT()