TRY_CAST (Transact-SQL)

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

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

Transact-SQL 语法约定

语法

TRY_CAST ( expression AS data_type [ ( length ) ] )

注意

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

参数

expression

指定要强制转换的任何有效表达式。

data_type

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

length

指定目标数据类型长度的可选整数。

可接受值的范围由 data_type 的值确定

返回类型

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

注解

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

TRY_CAST 不是新的保留关键字,且可用于所有兼容级别。 当连接到远程服务器时,TRY_CASTTRY_CONVERT 具有相同的语义。

如果长度超过 8000,则 TRY_CAST 不适用于 varchar(max)。

示例

A. TRY_CAST 返回 Null。

下面的示例演示强制转换失败时 TRY_CAST 返回 Null。

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

下面是结果集。

Result
------------
Cast failed
  
(1 row(s) affected)

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

SET DATEFORMAT dmy;

SELECT TRY_CAST('12/31/2022' AS DATETIME2) AS Result;
GO

下面是结果集:

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

B. TRY_CAST 失败并显示错误

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

SELECT TRY_CAST(4 AS XML) AS Result;
GO

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

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

C. TRY_CAST 成功

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

SET DATEFORMAT mdy;

SELECT TRY_CAST('12/31/2022' AS DATETIME2) AS Result;
GO

下面是结果集。

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

另请参阅