以下のSQLクエリを実行した場合;次のエラーが表示されます。
データ型nvarcharから数値への変換エラー。
COLUMNA
には、小数点以下2桁までのフィールドを含む数値(負および正)のみが含まれ、ドット10進数として格納されます。
IF OBJECT_ID('st00_TABLEA','U') IS NOT NULL DROP TABLE [st00_TABLEA]
SELECT
COLUMNA AS COLUMNA_s
,CASE WHEN [COLUMNA] = '' THEN 0 ELSE CONVERT(NUMERIC(18,2),REPLACE([COLUMNA],',','.')) END AS COLUMNA
INTO st00_TABLEA
FROM dbosu.TABLEA;
また、次のことも試してみましたが、それでも同じ問題があります。
IF OBJECT_ID('st00_TABLEA','U') IS NOT NULL DROP TABLE [st00_TABLEA]
SELECT
COLUMNA AS COLUMNA_s
,CONVERT(DECIMAL(18,2),COLUMNA) AS COLUMNA
INTO st00_TABLEA
FROM dbosu.TABLEA;
列のデータを修正する必要があるかもしれませんが、とにかく次のいずれかを行うことができます:
1-数値であるかどうかを確認し、変換するか、0などの別の値を入力します
Select COLUMNA AS COLUMNA_s, CASE WHEN Isnumeric(COLUMNA) = 1
THEN CONVERT(DECIMAL(18,2),COLUMNA)
ELSE 0 END AS COLUMNA
2-列から数値のみを選択
SELECT COLUMNA AS COLUMNA_s ,CONVERT(DECIMAL(18,2),COLUMNA) AS COLUMNA
where Isnumeric(COLUMNA) = 1
文字 'e' '+'のfloat値の場合、10進数で変換しようとするとエラーになります。 ( '2.81104e + 006')。まだISNUMERICテストに合格しています。
SELECT ISNUMERIC('2.81104e+006')
1
を返します。
SELECT convert(decimal(15,2), '2.81104e+006')
返す
エラー:データ型varcharから数値への変換エラー。
そして
SELECT try_convert(decimal(15,2), '2.81104e+006')
NULL
を返します。
SELECT convert(float, '2.81104e+006')
正しい値2811040
を返します。