SQL TRY_CONVERT() 函数
SQL TRY_CONVERT() 函数尝试改变表达式的数据类型。如果转换失败,函数将返回 NULL 值,否则将返回转换后的值。
TRY_CONVERT() 函数与 CONVERT() 函数之间唯一的区别在于当转换失败时的处理方式。CONVERT() 函数将抛出错误,而 TRY CONVERT() 函数将返回 NULL 值。
语法
以下是 SQL TRY_CAST() 函数的语法:
TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )
参数
该函数只接受四个参数。具体如下描述:
- expression - 需要转换为数据类型的有效表达式。
-
datatype - 我们想要将表达式转换为的数据类型。
-
length - 用于定义目标数据类型的长度,该参数为可选参数,其默认值为30。
-
style - 该参数为可选整数表达式,指定TRY_CONVERT()函数如何转换给定表达式。
示例
让我们尝试使用以下查询将字符串转换为十进制数:
SELECT TRY_CONVERT(DECIMAL(6,2), '1234.5') AS Result;
输出
当我们执行上述查询时,所得到的输出如下:
+------------------------------------+
| Result|
+------------------------------------+
| 1234.50 |
+------------------------------------+
示例
让我们尝试使用以下查询将有效日期字符串转换为datetime2类型-
SELECT TRY_CONVERT (datetime2, '2023-02-23') AS Result;
输出
执行上述查询后,输出结果显示如下 –
+------------------------------------+
| Result|
+------------------------------------+
| 2023-02-23 00:00:00.0000000|
+------------------------------------+
示例
考虑以下示例,我们将把字符串转换为十进制,由于无法将字符串1234.45转换为十进制(3, 2),所以将返回NULL。让我们使用以下查询进行验证 –
SELECT TRY_CONVERT(decimal(3,2), '1234.45') AS Result;
输出
在执行以上查询时,输出结果显示如下 –
+------------------------------------+
| Result|
+------------------------------------+
| NULL |
+------------------------------------+
示例
让我们来看一个示例,我们在这个示例中使用 style 参数来指定表达式的翻译方式,并运行以下查询 –
SET LANGUAGE British;
SELECT
TRY_CONVERT(date, '02/23/2023', 101) AS "US",
TRY_CONVERT(date, '20230223', 112) AS "ISO",
TRY_CONVERT(date, '02/23/23', 1) AS "US (short)";
输出
上述查询的输出如下所示:
+-------------------+----------------+---------------+
| US | ISO | US(short) |
+-------------------+----------------+---------------+
| 2023-02-23 | 2023-02-23 | 2023-02-23 |
+-------------------+----------------+---------------+
示例
看以下示例,我们将使用以下查询将表达式转换为varchar并指定样式:
SELECT TRY_CONVERT(varchar, '2023-02-23', 101) AS Result;
输出
如果我们编译并运行上述查询,结果将如下产生:
+------------------------------------+
| Result|
+------------------------------------+
| 2023-02-23 |
+------------------------------------+
示例
让我们看一个下面的示例,在这个示例中, TRY_CONVERT() 函数在显式禁止转换的情况下返回错误,具体查询如下−
SELECT TRY_CONVERT(xml, 2) AS Result;
输出
执行上述查询后,将会生成如下所示的输出结果:
Explicit conversion from data type int to xml is not allowed.
示例
让我们考虑另一个示例,在这个示例中,我们将使用 TRY_CONVERT() 函数和case语句来运行以下查询-
SELECT
CASE WHEN TRY_CAST('TUTORIALSPOINT' AS int) IS NOT NULL
THEN 'CastFailed'
ELSE 'CastSucceeded'
END AS Result;
输出
当查询执行时,它将生成以下输出:
+------------------------------------+
| Result|
+------------------------------------+
| CastSucceeded |
+------------------------------------+
示例
考虑以下示例,我们将表达式转换为一个int类型,这会使得值被截断。通过使用以下查询:
SELECT TRY_CONVERT(int, 12.34) AS Result;
输出
当我们执行上述查询时,获得的输出如下所示:
+------------------------------------+
| Result|
+------------------------------------+
| 12 |
+------------------------------------+