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() 函式如何轉換給定的表示式。

示例

讓我們嘗試使用以下查詢,使用 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" 轉換為 decimal(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,並使用以下查詢指定 style:

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 |
+------------------------------------+
sql-conversion-functions.htm
廣告