如何使用 CAST() 在 SQL Server 中将字符串转换为日期/时间

发布于

在 SQL Server 中,可以使用 CAST() 函数将一种数据类型的表达式转换为另一种数据类型。此函数的工作方式与函数几乎相同,只是语法略有不同(并且不接受参数)。CONVERT()``CAST()``style

因此,如果您需要将字符串转换为日期/时间值,则可以使用该函数或函数。CONVERT()``CAST()

如果您在使用这两个函数时遇到错误,则该函数可能正是您所需要的。PARSE()

本文包含使用该函数的示例。CAST()

语法

语法是这样的:

CAST ( expression AS data_type [ ( length ) ] )

这些参数定义如下:

expression

任何有效的表达式。

data_type

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

length

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

示例 1 – 转换为日期数据类型

在此示例中,我们将字符串转换为日期数据类型(我们将其用作第二个参数来指定)。date

SELECT CAST(‘20 Dec 2018’ AS date) AS Result;

输出:

+------------+
| Result     |
|------------|
| 2018-12-20 |
+------------+

就像字符串需要采用能够转换为指定数据类型的样式一样,否则会收到错误:CONVERT()

SELECT CAST(‘Homer’ AS date) AS Result;

输出:

Conversion failed when converting date and/or time from character string.

示例 2 – 转换为日期时间数据类型

在此示例中,我们转换为日期时间数据类型:

SELECT CAST(‘20 Dec 2018’ AS datetime) AS Result;

输出:

+-------------------------+
| Result                  |
|-------------------------|
| 2018-12-20 00:00:00.000 |
+-------------------------+

您还可以指定时间和日期:

SELECT CAST(‘2pm 20 Dec 2018’ AS datetime) AS Result;

输出:

+-------------------------+
| Result                  |
|-------------------------|
| 2018-12-20 14:00:00.000 |
+-------------------------+

示例 3 – 转换为日期时间2数据类型

这里我们转换为 datetime2 数据类型:

SELECT CAST(‘20 Dec 2018’ AS datetime2) AS Result;

输出:

+-----------------------------+
| Result                      |
|-----------------------------|
| 2018-12-20 00:00:00.0000000 |
+-----------------------------+

示例 4 – 转换为日期时间偏移量数据类型

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

SELECT CAST(‘20 Dec 2018’ AS datetimeoffset) AS Result;

输出:

+------------------------------------+
| Result                             |
|------------------------------------|
| 2018-12-20 00:00:00.0000000 +00:00 |
+------------------------------------+

示例 5 – 转换为小日期时间数据类型

在这里,我们转换为 smalldatetime 数据类型:

SELECT CAST(‘20 Dec 2018’ AS smalldatetime) AS Result;

输出:

+---------------------+
| Result              |
|---------------------|
| 2018-12-20 00:00:00 |
+---------------------+

示例 6 – 转换为时间数据类型

在此示例中,我们转换为时间数据类型:

SELECT CAST(‘20 Dec 2018’ AS time) AS Result;

输出:

+----------+
| Result   |
|----------|
| 00:00:00 |
+----------+

在这个示例中,我们指定了一个日期,但没有指定时间,因此它返回为 .下面是另一个我们实际指定时间的示例:00:00:00

SELECT CAST(‘2pm’ AS time) AS Result;

输出:

+----------+
| Result   |
|----------|
| 14:00:00 |
+----------+

但是如果我们添加日期,我们会收到一个错误(与之前转换为日期时间时的示例不同):

SELECT CAST(‘2pm 20 Dec 2018’ AS time) AS Result;

输出:

Conversion failed when converting date and/or time from character string.

因此,在这种情况下,您需要转换为日期时间或小日期时间。

示例 7 – 省略日期

如果在转换为日期时间或小日期时间数据类型时省略日期,它将返回为日期:1900-01-01

SELECT CAST(‘2pm’ AS datetime) AS Result;

输出:

+-------------------------+
| Result                  |
|-------------------------|
| 1900-01-01 14:00:00.000 |
+-------------------------+

如果您更喜欢使用该函数,请使用与上面相同的示例查看这些字符串到日期/时间 CONVERT() 示例。CONVERT()

此外,如前所述,如果在尝试将字符串转换为日期时遇到错误,请尝试使用 PARSE() 函数。它在某些情况下不起作用。CAST()