Как преобразовать столбец Nvarchar в INT

У меня есть столбец nvarchar в одной из моих таблиц. Теперь мне нужно преобразовать значения столбца в тип INT.

Я пробовал использовать

cast(A.my_NvarcharColumn as INT) 

и

convert (int, N'A.my_NvarcharColumn')

Когда я выполнил свой запрос, я получаю ошибки, например

Ошибка конверсии при преобразовании значения nvarchar '23454542' в тип данных int.

Привет, я публикую весь фрагмент кода

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

Ответ 1

CONVERT принимает имя столбца, а не строку, содержащую имя столбца; ваше текущее выражение пытается преобразовать строку A.my_NvarcharColumn в целое число вместо содержимого столбца.

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

должен быть

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

Простой SQLfiddle здесь.

Ответ 2

Вы всегда можете использовать вспомогательную функцию ISNUMERIC для преобразования только того, что действительно числовое:

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

Ответ 3

Я знаю его слишком поздно Но я надеюсь, что он будет работать новыми посетителями Попробуйте эту работу...: D

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

AS 'my_NvarcharColumnmitter'
from A

Ответ 4

Ваш CAST() выглядит правильно.

Ваш CONVERT() неверен. Вы цитируете столбец как строку. Вам нужно что-то вроде

CONVERT(INT, A.my_NvarcharColumn)

** уведомление без кавычек **

Единственная причина, по которой это может произойти, - это иметь нечисловой символ в поле или вне диапазона.

Вы можете попробовать что-то вроде следующего, чтобы проверить его числовое значение и вернуть NULL, если это не так:

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

Ответ 5

Если вы хотите конвертировать из char в int, почему бы не подумать о unicode номере?

SELECT UNICODE(';') -- 59

Таким образом вы можете конвертировать любые char в int без каких-либо ошибок. Приветствия.