在SQL Server 2008中将nvarchar转换为bigint

13

我想将一个表的所有行插入到另一个表中,并且我还想将一个 nvarchar 字段转换为 bigint,但是当我使用 convert(bigint, col1) 时,SQL Server 显示以下错误:

将数据类型 nvarchar 转换为 bigint 时出错

如何解决这个问题?


4
“我该如何解决这个问题?- 简单点,移除无法转换为BigInteger的数据即可。” - Mitch Wheat
如何自动删除非数字数据? - Hossein Moradinia
2
无法使用魔杖,但可以通过编写 TSQL 代码来解决它! - Mitch Wheat
4个回答

27
你可以尝试使用 ISNUMERIC 函数来确定哪些行确实是数值类型:
UPDATE dbo.YourTable
SET BigIntColumn = CAST(NVarcharColumn AS BIGINT)
WHERE ISNUMERIC(NVarcharColumn) = 1

这将转换那些可以转换的行 - 其他需要手动处理。


这将无法处理存储为字符串的小数:SELECT CAST('.1' AS BIGINT)WHERE ISNUMERIC('.1')= 1 - BD.
只是为了补充BD的评论,char(36)和chars 43-46、48-57、92、128、160、162-165都被评估为1是数字。真正的难点在于,在where或join语句中,您首先逻辑上过滤掉所有非数字值,在最后进行转换语句,但仍会出现此错误(忽略短路并评估整个行)。 - Zachary Scott

0

在这里,我将列的navrchar值转换为bigInt,然后执行下面找到的两个列的加法:

SELECT (CAST(col1 AS BIGINT) + CAST(col2 AS BIGINT)) AS TotalValue from tableName 

0
你可以尝试这个:
CAST(CAST(col1 as NUMERIC) as BIGINT)

0

你应该将 bigint 转换为 nvarchar,而不是相反
使用 cast(Other_Column_name as nvarchar),而不是 cast(Column_Name as bigint)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接