Échec de la Conversion lors de la conversion de la valeur varchar "de 71,8" pour le type de données int
Je suis en train de convertir varchar(20)
champ de numeric(10,2)
et pour cela, je suis en utilisant ce script:
SELECT CAST(CASE Age WHEN 'NULL' THEN 0 ELSE Age END AS numeric(10,2)) AS Age
FROM AgeTable
Mais j'obtiens cette erreur:
Conversion a échoué lors de la conversion de la valeur varchar "de 71,8" pour le type de données int.
Ce SQL DB utilisez-vous? MySQL ou SQL Server?
Je suis à l'aide de sql server 2008
Je suis à l'aide de sql server 2008
OriginalL'auteur ARD | 2012-03-30
Vous devez vous connecter pour publier un commentaire.
Fondamentalement, de même que @Mikael Eriksson de la solution, seulement avec plus de sucre syntaxique:
Cela fonctionne pour moi. Il doit y avoir une étrange données dans le
Age
colonne. EssayezSELECT DISTINCT Age FROM AgeTable
et voir si il y a quelque chose qui n'est pas "NULLE" ou un numéro de série valide.A fonctionné pour moi aussi.
NULLIF
retourneNULL
siAge = 'NULL'
, sinon, elle renvoie la valeur deAge
. Le résultat retourné, siNULL
ouAge
, est ensuite convertie ennumeric(10, 2)
, qui est l'endroit où cette requête ne fonctionne pas pour vous, je suppose. Pour moi, cela ne peut signifier qu'une chose:Age
contient d'autres valeurs non numériques en dehors de'NULL'
. Donc, comme GregL l'indique, ont un regard sur les valeurs stockées dans la colonne.merci pour l'aide.Problème était avec les données dans le champ.J'ai trouvé une chaîne de caractères et des valeurs vides dans la colonne Âge.
OriginalL'auteur Andriy M
En supposant que vous utilisez SQL Server, essayez d'utiliser le
ISNULL()
fonction à la place de votreCASE
déclaration:when 'NULL'
. On dirait qu'il aNULL
valeurs stockées en tant que la valeur de la chaîne'NULL'
.Après l'utilisation de requête ci-dessus, c'est de donner une autre erreur: Erreur lors de la conversion du type de données varchar numérique.
Vrai. Ce qui n'est pas une grande pratique, donc @ARD, je vous recommande de magasin réel que les valeurs null comme
NULL
(pas de chaîne), et puis ma requête fonctionne. Est que le changement est possible?En fait, je suis d'extraire des données de production.Ainsi, les changements sur la production n'est pas possible.
OriginalL'auteur GregL
Votre dossier de déclaration est de retourner un
int
en raison de lathen 0
partie.Essayez plutôt ceci:
Age
colonne dans laelse
clause.OriginalL'auteur Mikael Eriksson