【发布时间】: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