次の方法で共有


TRY_CAST(Transact-SQL)

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

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

Transact-SQL 構文表記規則

構文

TRY_CAST ( expression AS data_type [ ( length ) ] )

引数

式 (expression)

キャストする有効な式を指定します。

data_type

expression をキャストするデータ型。 この値は、許容される値の範囲を決定します。

length

対象のデータ型の長さを指定する整数 (省略可能)。

戻り値の型

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

解説

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

TRY_CAST は予約された新しいキーワードではなく、すべての互換性レベルで使用可能です。 TRY_CAST がリモート サーバーに接続するときのセマンティクスは、TRY_CONVERT と同じです。

TRY_CAST は、次の場合に に対して機能しません。

  • 長さが 8,000 を超える場合は varchar(max)
  • 長さが 4,000 を超える場合は nvarchar(max)

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
    

    このクエリの結果は Cast failedを返します。

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

    SET DATEFORMAT dmy;
    
    SELECT TRY_CAST('12/31/2022' AS DATETIME2) AS Result;
    GO
    

    このクエリの結果は NULLを返します。

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/2022' AS DATETIME2) AS Result;
GO

このクエリの結果は 2022-12-31 00:00:00.0000000を返します。