sql >> データベース >  >> RDS >> Sqlserver

SQL ServerのPARSE()とTRY_PARSE()の違い:違いは何ですか?

    SQL Serverでは、PARSE() およびTRY_PARSE() 関数は、値を別のデータ型に変換するために使用されます。 1つの例外を除いて、基本的に同じことを行います。エラーへの対処方法。

    PARSE()の場合 別のデータ型に解析しようとすると失敗し、エラーが返されます。 TRY_PARSE()の場合 失敗すると、NULLが返されます 。

    例1-まず、類似点

    必要なデータ型の値を正常に解析できる場合に、両方の関数が同じ結果を返す方法を示す例を次に示します。

    SELECT 
        PARSE('Fri, 8 June 2018' AS date) AS PARSE,
        PARSE('Fri, 8 June 2018' AS date) AS TRY_PARSE;

    結果:

    +------------+-------------+
    | PARSE      | TRY_PARSE   |
    |------------+-------------|
    | 2018-06-08 | 2018-06-08  |
    +------------+-------------+
    

    予想どおり、どちらもまったく同じ結果を返します。

    しかし、必要なデータ型の値を解析できない場合にどうなるか見てみましょう。

    例2– PARSE()が失敗した場合

    PARSE()の場合の例を次に示します。 値を別の値に解析できません:

    SELECT PARSE('Next year' AS date) AS Result;

    結果:

    Error converting string value 'Next year' into data type date using culture ''. 
    

    要求されたデータ型の有効な表現を提供しなかったため、操作は失敗します。つまり、PARSE() Next yearを変換できません 日付に 要求に応じたデータ型。

    例3– TRY_PARSE()が失敗した場合

    TRY_PARSE()を使用して同じ値を解析しようとした場合の例を次に示します。 :

    SELECT TRY_PARSE('Next year' AS date) AS Result;

    結果:

    +----------+
    | Result   |
    |----------|
    | NULL     |
    +----------+
    

    解析は引き続き失敗しますが、NULLを返します。 エラーの代わりに。

    例4–条件付きステートメントでのTRY_PARSE()の使用

    TRY_PARSE()を取ることができます そしてその戻り値をテストします。 NULL値の場合は、1つを返すことができ、NULL以外の値の場合は、別のものを返すことができます。

    SELECT 
        CASE WHEN TRY_PARSE('Next year' AS date) IS NULL
            THEN 'Conversion failed'
            ELSE 'Conversion succeeded'
        END
    AS Result;

    結果:

    +-------------------+
    | Result            |
    |-------------------|
    | Conversion failed |
    +-------------------+
    

    例5–エラーのあるTRY_PARSE()

    TRY_PARSE()という理由だけで 上記の例でエラーが発生するわけではありません。決してないという意味ではありません。 エラーが発生します。この機能を使用している間もエラーが発生する場合があります。

    たとえば、cultureとして無効な値を指定すると、エラーが発生します 引数:

    SELECT TRY_PARSE('Next year' AS date USING 'Mars') AS Result;
    

    結果:

    The culture parameter 'Mars' provided in the function call is not supported. 
    

    これらの関数に関する注意事項

    これらの機能についてMicrosoftが言わなければならない点は次のとおりです。

    • PARSE()を使用することをお勧めします およびTRY_PARSE() 文字列から日付/時刻および数値タイプに変換する場合のみ。その他のデータ型については、CAST()を使用してください またはCONVERT()
    • これらの関数は、.NET Framework共通言語ランタイム(CLR)の存在に依存しています。
    • 文字列値の解析には、特定のパフォーマンスオーバーヘッドがあります。
    • これらの関数はCLRの存在に依存するため、リモート化されません。 CLRを必要とする機能をリモートしようとすると、リモートサーバーでエラーが発生します。

    1. SQLiteクエリ結果をコンマ区切りのリストとしてフォーマットする

    2. 柔軟で管理しやすい部品表(BOM)設計

    3. SQL-行から枯渇した値を減算する

    4. MySQLUpdateクエリの「フィールドリスト」エラーの不明な列