TRY_CONVERT (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库

如果强制转换成功,则返回转换为指定数据类型的值;否则,返回 NULL

Transact-SQL 语法约定

语法

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

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

data_type

要将 expression 强制转换为的数据类型

length

指定目标数据类型长度的可选整数,适用于允许用户指定长度的数据类型。 长度的最大值为 8,000 字节。

expression

要强制转换的值。

style

指定函数如何转换表达式的TRY_CONVERT可选整数表达式

style 接受与函数的CONVERT样式参数相同的值。 有关详细信息,请参阅 CAST 和 CONVERT

data_type的值确定可接受的值范围。 如果 样式NULL,则 TRY_CONVERT 返回 NULL

返回类型

如果强制转换成功,则返回转换为指定数据类型的值;否则,返回 NULL

注解

TRY_CONVERT 接收传递给它的值,并尝试将该值转换为指定的 data_typeTRY_CONVERT。 如果强制转换成功, TRY_CONVERT 则返回指定的 data_type;如果发生错误, NULL 则返回该值。 但是,如果您请求的转换是显式不允许执行的转换,则 TRY_CONVERT 失败并显示错误。

TRY_CONVERT是保留关键字 (keyword),从兼容级别110开始。

此函数能够远程连接到具有 SQL Server 2012 (11.x) 及更高版本的服务器。 它不远程到版本低于 SQL Server 2012(11.x)的服务器。

示例

A. TRY_CONVERT返回 NULL

下面的示例演示 TRY_CONVERT 了转换失败时返回 NULL 的内容。

SELECT
    CASE WHEN TRY_CONVERT(FLOAT, 'test') IS NULL
    THEN 'Cast failed'
    ELSE 'Cast succeeded'
END AS Result;
GO

下面是结果集。

Result  
------------  
Cast failed

以下示例演示表达式必须采用所需的格式。

SET DATEFORMAT dmy;
SELECT TRY_CONVERT(DATETIME2, '12/31/2022') AS Result;
GO

下面是结果集:

Result  
----------------------  
NULL

B. TRY_CONVERT 将失败,并出现错误

下面的示例演示显式不允许强制转换时 TRY_CONVERT 返回错误。

SELECT TRY_CONVERT(XML, 4) AS Result;
GO

此语句的结果是一个错误,因为整数无法强制转换为 xml 数据类型。

Explicit conversion from data type int to xml is not allowed.

°C TRY_CONVERT 成功

此示例演示表达式必须采用所需的格式。

SET DATEFORMAT mdy;
SELECT TRY_CONVERT(DATETIME2, '12/31/2022') AS Result;
GO

下面是结果集:

Result
----------------------------------
2022-12-31 00:00:00.0000000