我有一个字段
VARCHAR(6)
我正在尝试将其插入到另一个 bigint
类型的表中,它给了我一个错误
(从数据类型 varchar 转换为 bigint 时出错
这就是我正在做的事情
CONVERT(bigint, seconds) as seconds
有人可以帮忙解决这个问题吗?
这就是答案
(CASE
WHEN
(isnumeric(ts.TimeInSeconds) = 1)
THEN
CAST(ts.TimeInSeconds AS bigint)
ELSE
0
END) AS seconds
另一种选择是执行以下操作:
SELECT
CAST(P0.seconds as bigint) as seconds
FROM
(
SELECT
seconds
FROM
TableName
WHERE
ISNUMERIC(seconds) = 1
) P0
我认为你的代码是正确的。如果运行以下代码,它会转换字符串“60”,该字符串被视为 varchar 并返回整数 60,如果第二个中存在包含字符串的整数,则它可以工作。
select CONVERT(bigint,'60') as seconds
它又回来了
60
当文本“数字”有小数点时(至少在 TSQL 中),会出现此问题,导致上述解决方案不起作用。
只是发帖以防对其他人有帮助。让我发疯了一个小时。 解决方案似乎是首先转换为 float,然后转换为 bigint。
select cast(1234567891011.0 as varchar(50)) as numb1 into #t1;
select * from #t1;
select numb1
,cast(numb1 as bigint) as numb1x
from #t1; --Error converting data type varchar to 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;