【问题标题】:SQL, How to convert VARCHAR to bigint?SQL,如何将 VARCHAR 转换为 bigint?
【发布时间】:2013-01-31 22:26:11
【问题描述】:

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

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

这就是我正在做的事情

CONVERT(bigint, seconds) as seconds

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

【问题讨论】:

  • 您是否检查过数据以确保您要转换的字段中的值实际上可以转换为 int?
  • 似乎您的 varchar 之一不可转换...
  • 我有一个空,-数和正数!但我做了 isnull(second, 0) 并且我仍然有同样的问题 Convert(bigint, ISNULL(ts.TimeInSeconds,0) ) AS seconds
  • 尝试用where isnumeric(seconds) = 0找到它
  • isnumeric(seconds) = 0 没有帮助,但给了我一个想法,它奏效了。 Convert(bigint, isumiric(ts.TimeInSeconds) ) AS second 非常感谢您的帮助

标签: sql sql-server


【解决方案1】:

这就是答案

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

【讨论】:

  • 可能需要编辑它以使其正确,因为isnumiric 将不存在(检查拼写)。此外,即使CONVERT()(和ISNUMERIC())在您的机器上工作,您已将您的问题标记为“sql”,这是一种语言 - 您的机器具有特定的实现 (SQL 服务器)。标准是CAST(... as BIGINT) - 对于未来的观众,最好用相关的 RDBMS 标记您的问题,或者编写一个“标准”版本。
  • 那么,如果TimeInSeconds 中的值是有效整数,您想要插入1,如果不是有效整数,则插入0?您不想将TimeInSeconds 列中的值插入某处吗?
  • 我在找出问题后更正了我的答案。再次感谢你们的帮助:)
【解决方案2】:

另一种方法是:

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

【讨论】:

    【解决方案3】:

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

    select CONVERT(bigint,'60') as seconds 
    

    然后它返回

    60
    

    【讨论】:

      猜你喜欢
      • 2021-05-22
      • 2018-02-10
      • 2012-04-11
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 2013-03-21
      相关资源
      最近更新 更多