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;
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
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
.