【问题标题】:Nicer way to convert string to int将字符串转换为 int 的更好方法
【发布时间】:2020-03-25 06:38:26
【问题描述】:

有没有更好的方法在 SQL Server 上将 NVARCHAR 转换为 INT

SELECT CONVERT(INT, CONVERT(FLOAT, N'5.0'))

为什么简单的CONVERTCAST 会导致错误?

SELECT CONVERT(INT, N'5.0')
SELECT CAST(N'5.0 AS INT)

【问题讨论】:

  • 字符串中有小数点,因此 int 不是字符串的有效转换。

标签: sql sql-server type-conversion


【解决方案1】:

为什么简单的 CONVERT 或 CAST 会导致错误?

因为您尝试转换的值有小数点。而且整数没有小数点。

您可以使用DECIMAL 以及浮点数来解决这个问题:

SELECT CONVERT(decimal(10, 0), N'5.0')

DECIMAL 接受小数位(甚至超过 1)并将值四舍五入为适当的整数,因此结果可以大于或小于输入。

这与整数具有相同的范围,因此非常等价——您可以转换回来:

SELECT CONVERT(int, CONVERT(decimal(10, 0), N'5.0'))

请注意,这些仍然会出现溢出错误,因此我推荐TRY_CONVERT()

【讨论】:

    【解决方案2】:

    您可以将try_convertisnull 函数组合在一起。 try_convert 转换失败时会返回 null。如果第一个参数为空,isnull 将使用回退值。但其中很大一部分将使用第一个参数数据类型,因此如果使用以下代码,最终结果将是一个 int :

    declare @text nvarchar(20) = N'5.6'
    
    select isnull(try_convert(int,@text),convert(float,@text))
    

    Fiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 2017-06-09
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      相关资源
      最近更新 更多