【问题标题】:nvarchar into integer conversion errornvarchar 到整数转换错误
【发布时间】:2018-05-22 15:47:06
【问题描述】:

我正在尝试将一列邮政编码转换为整数,但即使我正确转换了该列,我也会收到转换错误:

with zips as (
select  id ,cast(replace(replace(left(ltrim(Zip_Code),5), '-', ''), char(32), '0') as int) as zip_clean
from table1)

select * from zips 
    where zip_clean in 
    (19116,
    94595,
    60062)

我上面的嵌套转换函数有什么问题吗?

【问题讨论】:

  • 这意味着您的replace 函数没有涵盖Zip_Code 中的所有可能场景。试试SELECT * FROM TABLE1 WHERE ISNUMERIC(replace(replace(left(ltrim(Zip_Code),5), '-', ''), char(32), '0')) = 0
  • 来源是什么并不重要,但我编辑了它。问题是嵌套函数是否正确!
  • 同意@B3S 这个查询不会按原样运行。如果我用字符串文字替换 id 和 zip_code 它确实运行。有什么不对劲。而且我们无权访问您的数据,因此,如果您的 zip_code 的字符不是破折号,它仍然可能会失败。另外,你的意思是在替换之后(外部)做左边?
  • 编辑问题添加一些示例数据和所需的结果与您拥有的SQL Server 版本。
  • 好吧,如果你得到一个转换错误(你说你做了)嵌套函数如何正确?那是修辞。在您的评论中添加! 对您没有帮助,只会伤害您。

标签: sql-server casting type-conversion nested-function


【解决方案1】:

因为我认为这回答了你的问题,所以我将把我的评论移到这里。

这意味着您的replace 函数并未涵盖 Zip_Code 中所有可能的场景。试试

 SELECT Zip_Code FROM TABLE1
    WHERE ISNUMERIC(replace(replace(left(ltrim(Zip_Code),5), '-', ''), char(32), 
    '0')) = 0

【讨论】:

    【解决方案2】:

    我认为您的查询是正确的,但没有考虑到一些无效的 zip。我会尝试运行下面的代码,它将返回非数字的值。然后您可能必须手动修复这些问题或以其他方式处理它们。

    SELECT *
    FROM YourTable
    WHERE ISNUMERIC(replace(replace(left(ltrim(zip_code),5), '-', ''), char(32), '0')) = 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多