TRY_CAST (Transact-SQL)

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

适用范围:SQL Server(SQL Server 2012 至当前版本)、Windows Azure SQL Database(初始版本至当前版本)。

主题链接图标 Transact-SQL 语法约定

语法

TRY_CAST ( expression AS data_type [ ( length ) ] )

参数

  • expression
    要转换的值。 任何有效的表达式。
  • data_type
    要将 expression 转换到的数据类型。

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

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

返回类型

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

注释

TRY_CAST 将采用传递给它的值,并将该值转换为指定的 data_type。 如果转换成功,TRY_CAST 按指定的 data_type 返回值;如果发生错误,则返回 null。 但是,如果您请求的转换是显式不允许执行的转换,则 TRY_CAST 失败并显示错误。

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

示例

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

下面是结果集:

Result
----------------------------------
2010-12-31 00:00:00.0000000

(1 row(s) affected)

请参阅

参考

TRY_CONVERT (Transact-SQL)

CAST 和 CONVERT (Transact-SQL)