SQL TRY CAST 函数或 TRY_CAST 函数是转换函数之一,它与 CAST 函数类似。它用于将一个表达式从一种数据类型转换为另一种数据类型。如果转换成功,TRY CAST 将返回所需数据类型的表达式。否则,它将返回 null。
如果 TRY_CAST 函数无法将表达式转换为所需数据类型,则此函数将返回 NULL。如果无法显式转换为所需数据类型,则会引发错误。在此 TRY CAST 演示中,我们将使用教程数据库中的 Employee 表。

SQL TRY CAST 函数语法
TRY_CAST 函数的语法是:
TRY_CAST (Expression AS Data_Type [(Length)]) -- For example SELECT CAST (245 AS VARCHAR(50)) AS [result_name] FROM [Source]
- Expression:指定您希望转换的任何有效表达式。
- Data_Type:指定您要将表达式转换为的数据类型。
- Length:这是一个可选的整数类型参数。您可以使用此参数指定目标SQL Server 数据类型的长度。
SQL TRY CAST 函数示例 1
TRY_CAST 函数可帮助您将任何表达式转换为所需的数据类型。下面的查询将显示使用此函数的多种方法。
DECLARE @str AS VARCHAR(50)
SET @str = '356789'
SELECT TRY_CAST(@str AS MONEY) AS Result;
-- Direct Inputs
SELECT TRY_CAST('2345' AS DECIMAL(10, 2)) AS Result;
SELECT TRY_CAST(123.456 AS VARCHAR(50)) AS Result;
SELECT TRY_CAST('09/19/2017' AS DATETIME) AS Result;
SELECT TRY_CAST('09/14/2017' AS DATETIME2) AS Result;
SELECT TRY_CAST(GETDATE() AS VARCHAR(30)) AS Result;
如您所见,它返回的结果与我们在 Cast 函数中获得的结果相同。我们已经在CAST 文章中解释了程序流程,请参考该文章。

TRY CAST 函数示例 2
在此示例中,我们将向您展示将错误的表达式和 NULL 值传递给 Try cast 函数时会发生什么。
SELECT TRY_CAST('19/14/2017' AS DATETIME2) AS Result;
SELECT TRY_CAST('Tutorial Gateway' AS INT) AS Result;
--Let me try the function with NULL value
SELECT TRY_CAST(NULL AS INT) AS Result;
从下面的屏幕截图可以看出,它为表达式返回 NULL。因为无法将它们转换为所需的数据类型。

让我们看看如果我们尝试将 65(整数值)转换为 XML 数据类型会发生什么。如您所知,无法隐式或显式地将整数转换为 XML。因此,此函数将返回 Error 作为输出。
SELECT TRY_CAST(65 AS XML) AS Result;
执行 Try_cast 查询
Messages
-------
Msg 529, Level 16, State 2, Line 2
Explicit conversion from data type int to xml is not allowed.
SQL TRY CAST (TRY_CAST) 函数示例 3
在此示例中,我们将在 Employee 表上应用 TRY_CAST 函数。
SELECT [EmpID]
,[FirstName]
,[LastName]
,[Education]
,[Occupation]
,TRY_CAST([YearlyIncome] AS DECIMAL(10, 3)) AS [Yearly Income]
,TRY_CAST([Sales] AS INT) AS [Sales Amount]
,TRY_CAST([HireDate] AS DATETIME2) AS [Hire Date]
FROM [Employee]
