我有一个 SQL Server 表配对邮政编码和纬度/经度几何,如下所示
ID ZIP5 geom
1 356HH 0xE610000001044E00....FFFFFFFF0000000003ID
2 35677 0xE6100000010404000000068....000003
我遇到的问题是,由于 ZIP5 字段包含字符,我似乎无法从一种类型转换为另一种类型。
我尝试过的是一种方法,其中我只提取完全整数友好的记录:
SELECT
zip,
coordinates
FROM (
SELECT
CONVERT(int, [ZIP5]) AS zip,
CONVERT(varchar(max), geom) AS coordinates
FROM
[SpatialData].[dbo].[zip5]
WHERE
ISNUMERIC([ZIP5]) = 1
) AS t1
WHERE
zip >= 85000 AND
zip < 86000
我假设由于子查询返回了一个INT
类型,所以在外部执行普通比较运算符绝对没有问题WHERE
。执行此查询时出现以下错误:
消息 245,级别 16,状态 1,行 1
将 nvarchar 值“356HH”转换为数据类型 int 时转换失败。
省略WHERE
external ,我在 ZIP5 列中得到一个包含 100% 整数的完整结果集。使用 external WHERE
,它似乎超越了前一个CONVERT
并且转换失败。
作为一些额外的说明:
- 这个查询的性质是好的,没有得到有字母的行。
- 将 HH(或任何其他双字符对)替换为数字零也是完全可以的(但是尝试过
REPLACE
但STUFF
无济于事) - 我已经尝试过 TRY/CATCH,但它在语句中似乎不起作用
WHERE
——当更广泛地捕获整个查询时,try/catch 最终将返回一个空集。
如果不制作临时表 - 表变量,哪种方法是最好的解决方法?