如何使用 CONVERT() 在 SQL Server 中从一种日期格式转换为另一种日期格式

发布于

有时,在使用数据库和其他编程环境时,您会得到一个日期值,但它的格式/数据类型错误。例如,如果使用内置日期函数生成日期,则可能包括日期和时间,直到最后一纳秒。你想要的只是日、月和年,像这样说:2018-01-01。

如果在使用 SQL Server 时发生这种情况,则可以使用该函数将其转换为其他数据类型。执行此操作时,数据类型将确定其显示格式。CONVERT()

本文提供了使用 SQL Server 中的函数将日期值转换为另一种(日期)数据类型的示例。CONVERT()

语法

首先,以下是官方语法:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

这些参数定义如下:

expression

任何有效的表达式。

data_type

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

length

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

style

一个整数表达式,它指定函数将如何转换。对于 NULL 的样式值,返回 NULL。 确定范围。CONVERT()expressiondata_type

示例 1 – 从 SYSDATETIME() 转换为日期数据类型

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

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

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

输出:

+-----------------------------+-------------+
| Original                    | Converted   |
|-----------------------------+-------------|
| 2018-06-06 22:53:47.2318751 | 2018-06-06  |
+-----------------------------+-------------+

示例 2 – 从 SYSDATETIME() 转换为 smalldatetime 数据类型

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

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

输出:

+-----------------------------+---------------------+
| Original                    | Converted           |
|-----------------------------+---------------------|
| 2018-06-06 22:56:51.6873250 | 2018-06-06 22:57:00 |
+-----------------------------+---------------------+

示例 3 – 从 SYSDATETIME() 转换为日期时间偏移量数据类型

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

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

输出:

+-----------------------------+------------------------------------+
| Original                    | Converted                          |
|-----------------------------+------------------------------------|
| 2018-06-07 09:17:15.2410693 | 2018-06-07 09:17:15.2410693 +00:00 |
+-----------------------------+------------------------------------+

示例 4 – 从 SYSDATETIME() 转换为 time 数据类型

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

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

输出:

+-----------------------------+------------------+
| Original                    | Converted        |
|-----------------------------+------------------|
| 2018-06-06 23:01:41.7070775 | 23:01:41.7070775 |
+-----------------------------+------------------+

示例 5 – 从 SYSDATETIMEOFFSET() 转换

前面的示例都使用相同的内置函数来生成日期/时间值,但当然,它不需要由这个函数生成。下面是一个使用 :SYSDATETIMEOFFSET()

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

输出:

+------------------------------------+----------------------+
| Original                           | Converted            |
|------------------------------------+----------------------|
| 2018-06-07 09:12:27.3660685 +10:00 | 2018-06-07           |
+------------------------------------+----------------------+

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

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

USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CONVERT(date, LastEditedWhen) 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()

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