SQL,如何将VARCHAR转换为bigint?

问题描述 投票:0回答:4

我有一个字段

VARCHAR(6)
我正在尝试将其插入到另一个
bigint
类型的表中,它给了我一个错误

(从数据类型 varchar 转换为 bigint 时出错

这就是我正在做的事情

CONVERT(bigint, seconds) as seconds

有人可以帮忙解决这个问题吗?

sql sql-server
4个回答
47
投票

这就是答案

(CASE
  WHEN
    (isnumeric(ts.TimeInSeconds) = 1) 
  THEN
    CAST(ts.TimeInSeconds AS bigint)
  ELSE
    0
  END) AS seconds

8
投票

另一种选择是执行以下操作:

SELECT
   CAST(P0.seconds as bigint) as seconds
FROM
   (
   SELECT
      seconds
   FROM
      TableName
   WHERE
      ISNUMERIC(seconds) = 1
   ) P0

3
投票

我认为你的代码是正确的。如果运行以下代码,它会转换字符串“60”,该字符串被视为 varchar 并返回整数 60,如果第二个中存在包含字符串的整数,则它可以工作。

select CONVERT(bigint,'60') as seconds 

它又回来了

60

-1
投票

当文本“数字”有小数点时(至少在 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; 
© www.soinside.com 2019 - 2024. All rights reserved.