次の方法で共有


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

expression をキャストするデータ型。

length

データ型でユーザー指定の長さが許可されるとき、ターゲット データ型の長さを指定する任意の整数。 長さの最大値は 8,000 バイトです。

式 (expression)

キャストする値。

スタイル

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

style は、関数の style パラメーターと同じ値をCONVERT受け取ります。 詳しくは、「CAST および CONVERT」をご覧ください。

data_type値によって、許容される値の範囲が決まります。 style が 、の場合TRY_CONVERTNULLNULL.

戻り値の型

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

解説

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

TRY_CONVERTは、互換性レベル110から始まる予約済みキーワード (keyword)です。

この関数は、SQL Server 2012 (11.x) 以降のバージョンを持つサーバーにリモート接続できます。 SQL Server 2012 (11.x) より前のバージョンのサーバーにはリモート接続されません。

A. TRY_CONVERTは NULL を返します

キャストが失敗したときに返されるTRY_CONVERTNULL例を次に示します。

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

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

Result  
------------  
Cast failed

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

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

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

Result  
----------------------  
NULL

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

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

Result
----------------------------------
2022-12-31 00:00:00.0000000