我有一个字段是 VARCHAR(6)
,我试图将它插入到另一张类型为 bigint
的表中,但是出现了错误
(Error Converting from data type varchar to bigint)
这是我的操作:
CONVERT(bigint, seconds) as seconds
有人可以帮忙解决这个问题吗?
我有一个字段是 VARCHAR(6)
,我试图将它插入到另一张类型为 bigint
的表中,但是出现了错误
(Error Converting from data type varchar to bigint)
这是我的操作:
CONVERT(bigint, seconds) as seconds
有人可以帮忙解决这个问题吗?
这是答案
(CASE
WHEN
(isnumeric(ts.TimeInSeconds) = 1)
THEN
CAST(ts.TimeInSeconds AS bigint)
ELSE
0
END) AS seconds
isnumiric
不存在(请检查拼写)。此外,即使 CONVERT()
(和 ISNUMERIC()
)在您的计算机上可以工作,但您已将您的问题标记为“sql”,这是一种_语言_ - 您的计算机具有特定的_实现_(SQL Server)。标准是 CAST(... as BIGINT)
- 对于未来的观众,最好要么使用相关RDBMS标记您的问题,要么编写一个“标准”版本。 - Clockwork-MuseTimeInSeconds
中的值是有效整数,则插入1
,如果不是有效整数,则插入0
?你不想在TimeInSeconds
列中插入值吗? - Mikael Eriksson另一种选择是这样做:
SELECT
CAST(P0.seconds as bigint) as seconds
FROM
(
SELECT
seconds
FROM
TableName
WHERE
ISNUMERIC(seconds) = 1
) P0
我认为你的代码是正确的。如果你运行以下代码,它会将被视为 varchar 的字符串 '60' 转换为整数 60,如果第二个参数中包含整数字符串,则它也能正常工作。
select CONVERT(bigint,'60') as seconds
60
在这个问题上出现了一个小问题,当文本中的'number'有一个小数点时,在TSQL中至少会导致上面的解决方案无法工作。
只是发帖以防对其他人有所帮助。让我疯狂了一个小时。 一个解决方案似乎是先转换为浮点数,然后再转换为大整数。
select cast(1234567891011.0 as varchar(50)) as numb1 into #t1; select * from #t1;
select numb1 ,cast(numb1 as bigint) as numb1x from #t1; --将数据类型varchar转换为bigint时出错。
--尽管它是一个数字: select numb1 ,isnumeric(numb1) as isnumb from #t1;
--上述提出的解决方案失败: select numb1, CASE WHEN isnumeric(numb1)=1 then cast(numb1 as bigint) ELSE 0 END as numb1x from #t1; --将数据类型varchar转换为bigint时出错。
--有效的解决方案: select numb1 ,cast(cast(numb1 as float) as bigint) as numb1x from #t1;
where isnumeric(seconds) = 0
查找它。 - dotjoe