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

SQL Serverで(decimal、float、int)に変換できないフィールド値を判別する方法

    プレーンISNUMERICはゴミです

    • 空の文字列、 + - および 。すべて有効です
    • +もそうです。 など
    • 1e-3 floatには有効ですが、10進数には有効ではありません(Floatしてから10進数にキャストする場合を除く)

    特に不可解ですがフェイルセーフなソリューションについては、 e0を追加してください または.0e0 次に ISNUMERICを使用する

    SELECT
       ISNUMERIC(MyCOl + 'e0')   --decimal check,
       ISNUMERIC(MyCOl + '.0e0')  --integer check
    

    だから

    SELECT
        ID, VALUE,
        CAST(
              CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
              AS decimal(38, 10)
            ) AS ConvertedVALUE
    FROM
        Mytable
    



    1. PostgreSQLインデックスを最大限に活用する

    2. PostgreSQLクエリの実行時間を取得する

    3. SQL Server(T-SQL)でサーバー名を返す2つの方法

    4. MySQL、1つのクエリで複数のテーブルを更新