代码之家  ›  专栏  ›  技术社区  ›  not_ur_avg_cookie

nvarchar到整数转换错误

  •  0
  • not_ur_avg_cookie  · 技术社区  · 6 年前

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

    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)
    

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

    2 回复  |  直到 6 年前
        1
  •  1
  •   B3S    6 年前

    既然我认为这是对你问题的回答,我将把我的评论移到这里。

    它意味着你的 replace 函数并没有用邮政编码覆盖所有可能的场景。尝试使用

     SELECT Zip_Code FROM TABLE1
        WHERE ISNUMERIC(replace(replace(left(ltrim(Zip_Code),5), '-', ''), char(32), 
        '0')) = 0
    
        2
  •  1
  •   SQLChao    6 年前

    我认为你的查询是对的,但不能解释某些无效的zip。我将尝试运行下面的,它将返回非数字的值。然后您可能需要手动修复这些问题或以其他方式处理它们。

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