将nvarchar转换为int,isnumeric在数字

时间:2018-05-24 21:38:21

标签: sql sql-server tsql ssms

我有一个数据类型为NVARCHAR的临时表,我需要将其迁移到数据类型为INTEGER的表。

我有两个NVARCHAR表,需要INTEGER,一个正在运行而另一个正在发出错误,

  

转换nvarchar值'9824时转换失败   '到数据类型int。

我尝试使用LTRIMRTRIM删除多余的空格,但ISNUMERIC()仍为0,错误保持不变。

这是导致错误的代码,

SELECT CAST(table_name AS integer)
FROM OLTP.table

我尝试了什么:

SELECT ISNUMERIC(REPLACE(Revenue, ' ', '')), Revenue, ISNUMERIC(REPLACE(LTRIM(RTRIM(Revenue)), '  ', ' '))
FROM OLTP.ExtractedData

样本数据

(No column name)    Revenue (No column name)
0   9824    0
0   5661    0
0   3250    0
0   2959    0
0   2511    0
0   2072    0
0   2056    0
0   1705    0
0   1704    0

4 个答案:

答案 0 :(得分:1)

你可能在那里有一个换行符,TRIM / RTRIM不会修剪它们。

declare @value nvarchar(10) = '1234
'

select ISNUMERIC(Replace(CHAR(9), '', @value))
select ISNUMERIC(Replace(CHAR(10), '', @value))
select ISNUMERIC(Replace(CHAR(13), '', @value))
select ISNUMERIC(Replace(CHAR(32), '', @value))

答案 1 :(得分:0)

而不是cast()使用`try_cast()

SELECT TRY_CAST(table_name AS integer)
FROM OLTP.table

答案 2 :(得分:0)

  SELECT  PARSE(column_name AS int )  from table

Tested

答案 3 :(得分:0)

我会检查长度。这将让您了解您正在寻找多少特殊字符。

SELECT LEN(Revenue)
FROM OLTP.ExtractedData

然后使用SUBSTRINGASCII找出角色是什么。

SELECT 
  ASCII(SUBSTRING(Revenue, 5, 1))
FROM OLTP.ExtractedData