web-dev-qa-db-fra.com

Comment convertir la colonne Nvarchar en INT

J'ai une colonne nvarchar dans l'une de mes tables. Maintenant, je dois convertir les valeurs de cette colonne en type INT

J'ai essayé d'utiliser 

cast(A.my_NvarcharColumn as INT) 

et 

convert (int, N'A.my_NvarcharColumn')

Lorsque j’exécutais ma requête, des erreurs telles que 

La conversion a échoué lors de la conversion de la valeur nvarchar '23454542' en type de données int.  

salut je poste mon extrait de code entier 

SELECT A.objID, name, des,  right(Replace(Ltrim(Replace(substring(my_nvarcharcolumn,1,9), '0', ' ')), ' ', '0'),10) AS new_nvarcharcolumn 
INTO #tmp1
FROM [database].[dbo].[tblname] AS A
INNER JOIN (SELECT * FROM [database].[dbo].tblname1 WHERE sourceID = 32) AS AI ON source = A.objID
INNER JOIN [database].[dbo].tblname2 AS I ON I.ObjectID = A.Source

SELECT MAX(m_dAddDate) AS date_Asof, dnum INTO #tmp2 FROM 
(SELECT * FROM [database].[dbo].tblname WHERE senior <> '' AND class = 'SSS') AS A
GROUP BY dnum

SELECT DISTINCT A.* INTO #tmp3 FROM #tmp1 AS A
INNER JOIN #tmp2 AS SD ON SD.dnum =cast(A.new_nvarcharcolumn as INT)
INNER JOIN database.[dbo].tbl4 AS M ON M.dnum = cast(A.new_nvarcharcolumn as INT)  AND SD.date_Asof = M.adddate
11
user1348424

CONVERT prend le nom de la colonne, pas une chaîne contenant le nom de la colonne; votre expression actuelle tente de convertir la chaîne A.my_NvarcharColumn en un entier au lieu du contenu de la colonne.

SELECT convert (int, N'A.my_NvarcharColumn') FROM A;

devrait plutôt être

SELECT convert (int, A.my_NvarcharColumn) FROM A;

Simple SQLfiddle ici .

15
Joachim Isaksson

Vous pouvez toujours utiliser la fonction d'assistance ISNUMERIC pour convertir uniquement ce qui est réellement numérique:

SELECT
     CAST(A.my_NvarcharColumn AS BIGINT)
FROM 
     A
WHERE
     ISNUMERIC(A.my_NvarcharColumn) = 1
5
marc_s

Je sais que c'est trop tard, mais j'espère que ça marchera.

select 
  case 
      when isnumeric(my_NvarcharColumn) = 1 then 
              cast(my_NvarcharColumn AS int)
      else
              NULL
 end

AS 'my_NvarcharColumnmitter'
from A
1
Khurram Ali

Si vous souhaitez convertir char en int, pourquoi ne pas penser à unicode number?

SELECT UNICODE(';') -- 59

De cette façon, vous pouvez convertir n'importe quel caractère en int sans erreur. À votre santé.

0
Xin Wang

Votre CAST () semble correct.

Votre CONVERT () n'est pas correct. Vous citez la colonne en tant que chaîne. Vous voudrez quelque chose comme

CONVERT(INT, A.my_NvarcharColumn)

** avis sans les guillemets **

La seule autre raison pour laquelle cela pourrait échouer est si vous avez un caractère non numérique dans la valeur du champ ou s'il est hors limites.

Vous pouvez essayer quelque chose comme ce qui suit pour vérifier sa valeur numérique et renvoyer une valeur NULL si ce n'est pas le cas:

SELECT
 CASE
  WHEN ISNUMERIC(A.my_NvarcharColumn) = 1 THEN CONVERT(INT, A.my_NvarcharColumn)
  ELSE NULL
 END AS my_NvarcharColumn
0
Alf47