将varchar值'N'转换为数据类型smallint时,转换失败。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将varchar值'N'转换为数据类型smallint时,转换失败。相关的知识,希望对你有一定的参考价值。

我只是将一些数据从一个表插入到另一个表中,但我面临一个错误。

当把varchar值'N'转换为数据类型smallint时,转换失败。

这是因为我插入的其中一列的数据类型是 smallint 数据类型,但数据是以'N'的形式出现,所以出现了一个错误。

Insert into target
(
ID
) 
select
id
from source

数据类型为 id 源于 varchar(10) 而来自目标的ID数据类型为 smallint.

有谁能给出答案吗?我试过使用投射函数,但没有用。

答案

正如其他人所提到的,你不能将一个值为'N'的VARCHAR(10)转换成一个smallint。

你需要决定将什么值(如果有的话)插入到目标表中,其中源值为 [id] 包含0-9以外的字符,或者超出了SMALLINT的范围。

如果你决定将值清空,可以使用 TRY_CAST() 功能...

INSERT  INTO target ( [ID] )
SELECT  TRY_CAST ( [id] AS SMALLINT )
FROM    source ;

这将插入一个 NULL的源值,如果 [id] 包含0-9以外的字符,或者转换为SMALLINT范围以外的整数。

如果你决定在这个条件下插入一个预先确定的数字(例如,0),你可以在这个条件下结合一个 TRY_CAST() 带着 COALESCE() 功能...

INSERT  INTO target ( [ID] )
SELECT  COALESCE ( TRY_CAST ( [id] AS SMALLINT ), 0 )
FROM    source ;

这将插入一个 0的源值,如果 [id] 包含0-9以外的字符,或者转换为SMALLINT范围以外的整数。

以上是关于将varchar值'N'转换为数据类型smallint时,转换失败。的主要内容,如果未能解决你的问题,请参考以下文章

c# 将数据类型 varchar 转换为 bigint 时出错

在将 varchar 值 'xiaoming' 转换成数据类型 int 时失败。

在Sql中将 varchar 值 '1,2,3,4,5,6' 转换成数据类型 int

sql 将数字转换为varchar 怎么会变成16进制

oracle中如何将varchar型转换成int型

在将 varchar 值 '借阅次数' 转换成数据类型 int 时失败