Convertir une chaîne en int à l'aide d'une requête SQL


169

Comment convertir une chaîne en entier à l'aide d'une requête SQL sur SQL Server 2005?

Réponses:


298

Vous pouvez utiliser CAST ou CONVERT :

SELECT CAST(MyVarcharCol AS INT) FROM Table

SELECT CONVERT(INT, MyVarcharCol) FROM Table

4
Comment attraper / empêcher l'exception lorsque l'un des champs n'est pas numérique? Je m'attendais à ce qu'il se convertisse en 0.
Chloe

40
Trouvé:select CASE WHEN ISNUMERIC('x') = 1 THEN CAST('x' AS INT) ELSE 0 END
Chloe

9
Juste un mot: IsNumeric()peut produire des résultats pervers. Il renverra TRUE pour la chaîne "-.", Ce qui provoquera toujours une erreur lorsque vous essayez de la convertir en nombre.
Curt

3
IsNumeric sera vrai pour les chaînes avec "-" uniquement si la chaîne est numérique, par exemple "-5" ou "-20", il sera faux pour les chaînes comme "5-", "-2-1". Donc, si isNumeric () est vrai, la conversion ne devrait
lever

11

Sachez également que lors de la conversion d'une chaîne numérique, c'est- '56.72'à- dire vers INT, vous pouvez rencontrer une erreur SQL.

Conversion failed when converting the varchar value '56.72' to data type int.

Pour contourner ce problème, effectuez simplement deux conversions comme suit:

STRING -> NUMERIC -> INT

ou

SELECT CAST(CAST (MyVarcharCol AS NUMERIC(19,4)) AS INT)

Lors de la copie de données de TableA vers TableB, la conversion est implicite, vous n'avez donc pas besoin de la deuxième conversion (si vous êtes heureux d'arrondir à l'INT le plus proche):

INSERT INTO TableB (MyIntCol)
SELECT CAST(MyVarcharCol AS NUMERIC(19,4)) as [MyIntCol]
FROM TableA

8

À partir de SQL Server 2012, vous pouvez utiliser TRY_PARSE ou TRY_CONVERT .

SELECT TRY_PARSE(MyVarcharCol as int)

SELECT TRY_CONVERT(int, MyVarcharCol)

Ce n'est certainement pas la bonne réponse à la question d'origine car elle concernait SQL Server 2005, mais comme nous sommes en 2019 et que moins de gens sont attachés à une telle ancienne version de SQL Server, cette réponse est vraiment utile.
shaune

-2

Essayez celui-ci, cela a fonctionné pour moi à Athéna:

cast(MyVarcharCol as integer)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.