我的查询使用了一个简单的 WHERE logitude!=' 0' 我虽然足以只提取已成功进行地理编码的记录。
我无法控制质量或地址是否成功地进行了地理编码,因为该表是只读的。我只能控制我的查询。
经度通常写出最多6位小数:-81.729345
纬度和经度列的数据类型为十进制,长度为9,小数为6。
我想我需要确保我只选择一定经度范围内的记录?
我试过了这个:经度之间' -89.69%' AND' -72.07%' 有和没有%
但是它会返回所有记录,所以我知道它的错误,因为有些记录的地理编码不正确(例如:14.359164)。
如何仅在该范围内选择并允许任意数量的小数位?
以下是纬度/经度列的摘录:
=MID(IF(ISNUMBER(MATCH(C5, store1!$F$4:$F$29, 0)), "\store1", "")
&IF(ISNUMBER(MATCH(C5, store2!$F$4:$F$29, 0)), "\store2", "")
&IF(ISNUMBER(MATCH(C5, store3!$F$4:$F$29, 0)), "\store3", "")
&IF(ISNUMBER(MATCH(C5, store4!$F$4:$F$29, 0)), "\store4", "")
&IF(ISNUMBER(MATCH(C5, store5!$F$4:$F$29, 0)), "\store5", "")
&IF(ISNUMBER(MATCH(C5, store6!$F$4:$F$29, 0)), "\store6", "")
&IF(ISNUMBER(MATCH(C5, store7!$F$4:$F$29, 0)), "\store7", "")
&IF(ISNUMBER(MATCH(C5, store8!$F$4:$F$29, 0)), "\store8", "")
&IF(ISNUMBER(MATCH(C5, store9!$F$4:$F$29, 0)), "\store9", "")
&IF(ISNUMBER(MATCH(C5, store10!$F$4:$F$29, 0)), "\store10", ""), 2, 99)
答案 0 :(得分:1)
latitude
和longitude
列通常包含FLOAT
或DOUBLE
数据类型。他们很少有DECIMAL(10,4)
数据类型,有时面对所有原因和逻辑,他们有VARCHAR(15)
或某种类型的数据类型。
如果你的是FLOAT
或DOUBLE
,你的比较是通过算术完成的,而不是文本模式匹配。所以你想要这种WHERE
子句。
WHERE Longitude BETWEEN -89.69 AND -72.07
这将捕获-89.69,-72.07及其间的所有值。
这也适用于DECIMAL
数据类型。如果您有varchar经度数据,最好的办法是将其更改为FLOAT。没错,你想要
WHERE CAST(longitude AS DECIMAL(10,4)) BETWEEN -89.69 AND -72.07
但这会有糟糕的表现。
%
通配符仅适用于字符数据类型,仅适用于LIKE
比较。