Problème de convertir les valeurs de colonne de type VARCHAR(n) en DÉCIMAL
J'ai un Serveur SQL server 2000 base de données avec une colonne de type VARCHAR(255). Toutes les données sont soit NULLES, ou de données numériques avec jusqu'à deux points de la précision (par exemple '11.85'). J'ai essayé d'exécuter la suite de requêtes T-SQL, mais n'a reçu l'erreur "Erreur lors de la conversion du type de données varchar numérique'
SELECT CAST([MyColumn] AS DECIMAL)
FROM [MyTable];
J'ai essayé un plus spécifiques exprimés, ce qui a aussi échoué.
SELECT CAST([MyColumn] AS DECIMAL(6,2))
FROM [MyTable];
J'ai aussi essayé la suite pour voir si des données non numériques, et les seules valeurs retournées sont NULLES.
SELECT ISNUMERIC([MyColumn]), [MyColumn]
FROM [MyTable]
WHERE ISNUMERIC([MyColumn]) = 0;
J'ai essayé de les convertir à d'autres types de données, tels que le FLOTTEUR et de l'ARGENT, mais seulement de l'ARGENT a été un succès. J'ai donc essayé le suivant:
SELECT CAST(CAST([MyColumn] AS MONEY) AS DECIMAL)
FROM [MyTable];
...qui a très bien fonctionné. Des idées pourquoi l'original de la requête a échoué? Aura-t-il un problème si j'ai d'abord convertir pour de l'ARGENT et ensuite à VIRGULE?
Merci!
OriginalL'auteur Kevin Babcock | 2010-04-06
Vous devez vous connecter pour publier un commentaire.
Il est probable que cela dépend si le symbole décimal est une virgule ou un point. Voici quelques requêtes de test et de leurs résultats:
La documentation pour ISNUMERIC dit :
Les deux
3.6
et3,6
peut être coulé àmoney
, c'est pourquoiisnumeric('3,6')
retourne1
.Pour résoudre ce problème, remplacez la virgule avec des points (ou vice-versa, si votre système utilise la virgule comme symbole décimal):
Une autre option est de changer le "symbole décimal" dans Windows. C'est dans Panneau de Config -> Régionales et Linguistiques -> Format -> Paramètres -> Nombres.
OriginalL'auteur Andomar
Une autre cause est la chaîne vide. Par exemple, si vous utilisez l'assistant d'importation pour importer un fichier CSV, les champs vides deviennent des chaînes vides, pas les valeurs null.
C'est un idiome commun pour la fixation de cette:
OriginalL'auteur Paul Chernoch
Select CAST(isnull(Macolonne,0) comme séparateur Décimal(4,2))
À PARTIR de [Matable];
OriginalL'auteur Sasikiran