web-dev-qa-db-fra.com

SQL Server: erreur lors de la conversion du type de données nvarchar en numérique

Si je lance la requête SQL ci-dessous; Je reçois l'erreur suivante: 

Erreur lors de la conversion du type de données nvarchar en numérique.

COLUMNA ne contient que des nombres (négatifs et positifs), y compris les champs avec un maximum de deux chiffres après la virgule et est stocké sous forme de virgule décimale.

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;

J'ai aussi essayé le suivant, mais toujours le même problème:

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;
6
bbilal

Vous devrez peut-être réviser les données de la colonne, mais vous pouvez quand même effectuer l'une des opérations suivantes: -

1- vérifiez s'il est numérique puis convertissez-le sinon mettez une autre valeur comme 0

Select COLUMNA AS COLUMNA_s, CASE WHEN Isnumeric(COLUMNA) = 1
THEN CONVERT(DECIMAL(18,2),COLUMNA) 
ELSE 0 END AS COLUMNA

2- sélectionner uniquement les valeurs numériques dans la colonne

SELECT COLUMNA AS COLUMNA_s ,CONVERT(DECIMAL(18,2),COLUMNA) AS COLUMNA
where Isnumeric(COLUMNA) = 1
18
Emad Khalil

Dans le cas de valeurs flottantes avec les caractères 'e' '+', le résultat est erroné si nous essayons de convertir en décimal. ('2.81104e + 006'). Il réussit toujours le test ISNUMERIC.

SELECT ISNUMERIC('2.81104e+006') 

renvoie 1.

SELECT convert(decimal(15,2), '2.81104e+006') 

résultats 

error: Erreur lors de la conversion du type de données varchar en numérique.

Et

SELECT try_convert(decimal(15,2), '2.81104e+006') 

renvoie NULL.

SELECT convert(float, '2.81104e+006') 

renvoie la valeur correcte 2811040

2
Chandrika