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

发布于

如果使用 SQL Server,则可能至少使用了一个 or 函数从一种数据类型转换为另一种数据类型。如果您在尝试将字符串转换为日期/时间数据类型时遇到错误,则该函数可能是您需要的。CONVERT()``CAST()``PARSE()

例如,如果你有一个字符串,比如说,星期五,_20 Jul 2018,_or 函数将抛出错误。但是该函数将毫无问题地处理它。CONVERT()``CAST()``PARSE()

该函数返回表达式的结果,该表达式转换为 SQL Server 中请求的数据类型。因此,您可以使用它将字符串值“转换”为日期/时间数据类型(例如日期,日期时间,日期时间2等)。PARSE()

语法

下面是该函数的语法:PARSE()

PARSE ( string_value AS data_type [ USING culture ] )

其中 是要分析的值,是要分析到的数据类型,并且是一个可选参数,可用于指定在分析字符串时使用的语言格式。string_value``data_type``culture

基本示例

下面是演示用法的基本示例。

SELECT PARSE(‘Friday, 20 July 2018’ AS datetime2) AS ‘Result’;

输出:

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

删除时间部分

在前面的示例中,我们指定应将字符串解析为 datetime2 数据类型。此数据类型包括高精度的时间分量。如果不需要时间组件,则始终可以将其解析为日期数据类型。

如果我们指定日期数据类型,则结果如下:

SELECT PARSE(‘Friday, 20 July 2018’ AS date) AS ‘Result’;

输出:

+------------+
| Result     |
|------------|
| 2018-07-20 |
+------------+

保留时间部分,但精度较低

如果您_确实_需要时间,但精度较低,则始终可以使用 smalldatetime 数据类型:

SELECT PARSE(‘2:35:50pm, Friday, 20 July 2018’ AS smalldatetime) AS ‘Result’;

输出:

+---------------------+
| Result              |
|---------------------|
| 2018-07-20 14:36:00 |
+---------------------+

但是,如果这还不够精确,则始终存在日期时间数据类型:

SELECT PARSE(‘2:35:50.5234pm, Friday, 20 July 2018’ AS datetime) AS ‘Result’;

输出:

+-------------------------+
| Result                  |
|-------------------------|
| 2018-07-20 14:35:50.523 |
+-------------------------+

日期输入的变化

该函数通常可以计算出您尝试转换的日期,只要您将其作为所请求数据类型的有效表示形式即可。以下是以各种样式提供的日期的一些示例:PARSE()

SELECT PARSE(‘Friday, 20 July 2018’ AS date) AS ‘Result 1’, PARSE(‘Fri, 20 July 2018’ AS date) AS ‘Result 2’, PARSE(‘Friday, July 20 2018’ AS date) AS ‘Result 3’, PARSE(‘Fri 20 Jul 18’ AS date) AS ‘Result 4’;

输出:

+------------+------------+------------+------------+
| Result 1   | Result 2   | Result 3   | Result 4   |
|------------+------------+------------+------------|
| 2018-07-20 | 2018-07-20 | 2018-07-20 | 2018-07-20 |
+------------+------------+------------+------------+

然而,它不是通灵的:

SELECT PARSE(‘Next Friday’ AS date) AS ‘Result’;

输出:

Error converting string value 'Next Friday' into data type date using culture ''. 

添加区域性

可以添加第三个参数来指定字符串的格式设置。例如,如果您的日期是 ,则可能表示 2018 年 1 月 6 日或 2018 年 6 月 1 日,具体取决于所使用的区域性。01/06/2018

下面是指定区域性的示例:

SELECT PARSE(‘01/06/2018’ AS date USING ’en-US’) AS ’en-US’, PARSE(‘01/06/2018’ AS date USING ’en-GB’) AS ’en-GB’;

输出:

+------------+------------+
| en-US      | en-GB      |
|------------+------------|
| 2018-01-06 | 2018-06-01 |
+------------+------------+

如果未提供此参数,则使用当前会话的语言。

提供错误的工作日

该函数非常智能,因为如果您提供错误的工作日,它将返回错误。PARSE()

因此,如果我们使用与前面示例相同的日期,但我们将工作日从星期五更改为星期四,则会发生以下情况:

SELECT PARSE(‘Thursday, 20 July 2018’ AS date) AS ‘Result’;

输出:

Error converting string value 'Thursday, 20 July 2018' into data type date using culture ''.