TRY_CONVERT (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

指定されたデータ型へのキャストが成功した場合は、キャストされる値が返されます。それ以外の場合は、null が返されます。

Transact-SQL 構文表記規則

構文

TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )  

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

data_type [ ( length ) ]
expression をキャストするデータ型。

式 (expression)
キャストされる値。

style
TRY_CONVERT 関数が expression を変換する方法を指定する省略可能な整数式。

style は、CONVERT 関数の style パラメーターと同じ値を使用します。 詳細については、「 CAST および CONVERT (Transact-SQL)」を参照してください。

許容される値の範囲は、data_type の値によって決まります。 style が null の場合、TRY_CONVERT は null を返します。

戻り値の型

指定されたデータ型へのキャストが成功した場合は、キャストされる値が返されます。それ以外の場合は、null が返されます。

解説

TRY_CONVERT は渡された値を使用して、指定された data_type への変換を試みます。 キャストが成功した場合、TRY_CONVERT は指定された data_type と同じ値を返します。エラーが発生した場合は null が返されます。 ただし、明示的に許可されない変換を要求すると、TRY_CONVERT はエラーが発生して失敗します。

互換性レベル 110 以上では、TRY_CONVERT は予約されたキーワードです。

この関数は、SQL Server 2012 (11.x) 以上のバージョンがインストールされているサーバーに対してリモート処理が可能です。 SQL Server 2012 (11.x) より前のバージョンをインストールしているサーバーには、リモート処理が行われません。

A. TRY_CONVERT は null を返します。

次の例は、キャストが失敗した場合に TRY_CONVERT から null が返されることを示しています。

SELECT   
    CASE WHEN TRY_CONVERT(float, 'test') IS NULL   
    THEN 'Cast failed'  
    ELSE 'Cast succeeded'  
END AS Result;  
GO  

結果セットは次のようになります。

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

次の例は、式を求められている形式にする必要があることを示しています。

SET DATEFORMAT dmy;  
SELECT TRY_CONVERT(datetime2, '12/31/2010') AS Result;  
GO  

結果セットは次のようになります。

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

B. TRY_CONVERT でエラーが発生して失敗する

次の例では、キャストが明示的に許可されていない場合に TRY_CONVERT がエラーを返すことを示します。

SELECT TRY_CONVERT(xml, 4) AS Result;  
GO  

このステートメントの結果はエラーです。整数を xml データ型にキャストすることはできないからです。

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

C. TRY_CONVERT が成功する

この例は、式を求められている形式にする必要があることを示しています。

SET DATEFORMAT mdy;  
SELECT TRY_CONVERT(datetime2, '12/31/2010') AS Result;  
GO  

結果セットは次のようになります。

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

参照

CAST および CONVERT (Transact-SQL)