J'ai une table avec des nombres dans un champ varchar(255)
. Ils sont tous supérieurs à un et ont plusieurs décimales. Je voudrais les convertir en nombres entiers. Selon chaque site Web que j'ai consulté, y compris celui-ci sur StackOverflow , l'un ou l'autre devrait fonctionner:
SELECT CAST(VarcharCol AS INT) FROM MyTable
SELECT CONVERT(INT, VarcharCol) FROM MyTable
Ces deux fonctionnent pour moi pour chaque type de valeur numérique, mais integer
- Je peux convertir en float
, decimal
, etc. très bien, mais essayer de convertir en integer
me donne l'erreur suivante:
Conversion failed when converting the varchar value '7082.7758172'
to data type int.
J'ai résolu le problème en convertissant le type de données Decimal(6,0)
, ce qui fonctionne bien. Mais juste pour mes études, quelqu'un peut-il me dire pourquoi la conversion en type de données int
(ou integer
) me cause une erreur? Merci.
La conversion d'une valeur VARCHAR en un INT échoue lorsqu'il existe des chiffres à droite de la décimale pour éviter la perte de données.
Si vous convertissez d'abord en FLOAT, puis en INT, la conversion fonctionne.
SELECT CAST(CAST('7082.7758172' as float) as int)
résultats
7082
En réalité, qu’il y ait des chiffres ou non n’a aucune importance. Le . (point) est interdit si vous voulez utiliser int. Dot ne peut pas - logiquement - faire partie de la définition Integer, alors même:
select cast ('7.0' as int)
select cast ('7.' as int)
échouera mais les deux conviennent pour les flotteurs.
Essaye ça
declare @v varchar(20)
set @v = 'Number'
select case when isnumeric(@v) = 1 then @v
else @v end
et
declare @v varchar(20)
set @v = '7082.7758172'
select case when isnumeric(@v) = 1 then @v
else convert(numeric(18,0),@v) end