web-dev-qa-db-ja.com

SQL Server:データ型nvarcharから数値への変換エラー

以下の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;
7
bbilal

列のデータを修正する必要があるかもしれませんが、とにかく次のいずれかを行うことができます:

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
21
Emad Khalil

文字 '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を返します。

6
Chandrika