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?

Rahul Vyas
la source

Réponses:

298

Vous pouvez utiliser CAST ou CONVERT :

SELECT CAST(MyVarcharCol AS INT) FROM Table

SELECT CONVERT(INT, MyVarcharCol) FROM Table
CMS
la source
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
Steven de Salas
la source
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)
Örjan Jämte
la source
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)
ashutosh singh
la source