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 [ ( length ) ]
要将 expression 强制转换为的数据类型

expression
要强制转换的值。

style
一个可选的整数表达式,指定 TRY_CONVERT 函数如何转换 expression

style 接受与 CONVERT 函数的 style 参数相同的值。 有关详细信息,请参阅 CAST 和 CONVERT (Transact-SQL)

可接受值的范围由 data_type 的值确定。 如果 style 为 NULL,则 TRY_CONVERT 返回 NULL

返回类型

返回转换为指定数据类型的值(如果转换成功);否则返回 Null。

注解

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

TRY_CONVERT 是兼容级别 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  
  
(1 row(s) affected)  

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

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

下面是结果集:

Result  
----------------------  
NULL  
  
(1 row(s) affected)  

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/2010') AS Result;  
GO  

下面是结果集。

Result  
----------------------------------  
2010-12-31 00:00:00.0000000  
  
(1 row(s) affected)  

另请参阅

CAST 和 CONVERT (Transact-SQL)