web-dev-qa-db-fra.com

Comment convertir Varchar en Int dans SQL Server 2008?

Comment convertir Varchar en Int dans un serveur SQL 2008.

j'ai le code suivant lorsque j'ai essayé de l'exécuter ne m'a pas permis de convertir Varchar en Int.

Select Cast([Column1] as INT) 

Column1 est de type Varchar (21) PAS de type NULL et je voulais le convertir en Int . En fait, j'essaie d'insérer Column1 dans une autre table ayant Field en tant que INT . S'il vous plaît, aidez-moi à convertir ceci?

13
Vikrant More

Les espaces ne poseront pas de problème pour cast, mais des caractères comme TAB, CR ou LF apparaîtront sous la forme d'espaces, ne seront pas réduits par LTRIM ou RTRIM et constitueront un problème.

Par exemple, essayez ce qui suit:

declare @v1 varchar(21) = '66',
        @v2 varchar(21) = '   66   ',
        @v3 varchar(21) = '66' + char(13) + char(10),
        @v4 varchar(21) = char(9) + '66'

select cast(@v1 as int)   -- ok
select cast(@v2 as int)   -- ok
select cast(@v3 as int)   -- error
select cast(@v4 as int)   -- error

Vérifiez votre saisie pour ces caractères et, si vous les trouvez, utilisez REPLACE pour nettoyer vos données.


Selon votre commentaire, vous pouvez utiliser REPLACE dans le cadre de votre cast:

select cast(replace(replace(@v3, char(13), ''), char(10), '') as int)

Si cela se produit souvent, il serait préférable de nettoyer les données et de modifier le mode de remplissage de la table afin de supprimer les variables CR et LF avant leur saisie.

17
Jeff Ogata

vous pouvez utiliser la fonction de conversion:

Select convert(int,[Column1])
8
Ali Rasouli

C'est comme cela que vous le feriez, est-ce que cela génère une erreur? Êtes-vous sûr que la valeur que vous essayez de convertir est convertible? Pour des raisons évidentes, vous ne pouvez pas convertir abc123 en int.

METTRE À JOUR 

Sur la base de vos commentaires, je supprimerais tous les espaces contenus dans les valeurs que vous essayez de convertir.

2
Abe Miessler

C’est la bonne façon de le convertir en INT tant que vous n’avez pas de caractère alpha ou de valeur NULL. 

Si vous avez des valeurs NULL, utilisez 

ISNULL(column1, 0)
1
Eric

Il existe deux types de méthode de conversion en SQL.

CAST et CONVERT ont des fonctionnalités similaires. CONVERT est spécifique à SQL Server et permet une plus grande flexibilité lors de la conversion entre les valeurs de date et d'heure, les nombres fractionnaires et les signifiants monétaires. CAST est le plus standard ANSI des deux fonctions.

Utiliser Convert

Select convert(int,[Column1])

Utilisation de la fonte

Select cast([Column1] as int)
0
Manish Vadher

Essayez avec la commande ci-dessous, et il demandera toutes les valeurs à INT

sélectionnez la casse lorsque isnumeric (YourColumn + '.0e0') = 1 puis lancez (YourColumn as int) sinon NULL fin/* cas */ de votre table

0
Shantanu

Essayez le code suivant. Dans la plupart des cas, cela est dû à la question des virgules.

cast(replace([FIELD NAME],',','') as float)
0
Jfang