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
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 .
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
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
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é.
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