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

SQL ServerのCAST()とTRY_CAST():違いは何ですか?

    SQL Serverでデータ型を変換するとき、同じことをしているように見えるさまざまな関数に遭遇します。ただし、通常、これらの機能には違いがあり、一見しただけではわからない場合があります。この例は、CAST()の違いです。 およびTRY_CAST() 機能。

    この記事では、SQLServerを使用する場合のこれらの関数の違いについて説明します。

    CAST()の主な違い およびTRY_CAST() 関数は、変換できないデータを処理する方法にあります。

    CAST()関数

    CAST() 関数は、あるデータ型の式を別のデータ型に変換します。これにより、異なるデータ型の2つの値を連結するなどのことができます。このように:

    SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;

    結果:

    Result     
    -----------
    Comments: 9

    これは、データを変換できる場合に正常に機能します。しかし、データを変換できない場合はどうなりますか?

    その場合、次のようになります:

    SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;

    結果:

    Error: Arithmetic overflow error converting numeric to data type varchar.

    これは十分に公平です。SQLServerがデータを変換できない場合は、知っておく必要があります。

    ただし、それを行う別の方法があります。

    TRY_CAST()関数

    TRY_CAST() 関数はCAST()と同じように機能します ただし、データを変換できない場合は、nullが返されます。 (CAST()のようなエラーをスローする代わりに する):

    SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;

    結果:

    Result
    ------
    null

    これは、条件付きプログラミングを使用して、データを変換できるかどうかに応じてアプリケーションが異なるタスクを実行する場合に便利です。

    例:

    SELECT   
        CASE WHEN TRY_CAST(10.00 AS varchar(2)) IS NULL   
        THEN 'Cast failed'  
        ELSE 'Cast succeeded'  
    END AS Result;

    結果:

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

    無効なデータ型

    TRY_CAST() 関数は、有効なデータ型を使用する場合にのみこのように機能します。したがって、許可されていないデータ型を明示的に指定すると、エラーが発生します。

    例:

    SELECT 'Comments: ' + TRY_CAST(10.00 AS Miami) AS Result;

    結果:

    Error: Type Miami is not a defined system type.

    1. WindowsでPerlのDBIモジュールを使用してMSSQLデータベースに接続するにはどうすればよいですか?

    2. mysqlで次の自動インクリメントIDを取得する方法

    3. HibernateでのOracleXMLType列の使用

    4. 整数のリストをC#からOracleストアドプロシージャに渡します