MySQL查询拉取一定范围内的经度
MySQL query to pull longitude within certain range
我有一个查询使用了一个简单的 WHERE logitude != '0' 我虽然足以只提取已成功地理编码的记录。
我无法控制质量,也无法控制地址是否已成功地理编码,因为 table 是只读的。我只能控制我的查询。
经度通常最多保留6位小数:-81.729345
纬度和经度列的数据类型为十进制,长度为 9,小数位数为 6。
我想我需要确保我只 select 在一定的经度范围内记录?
我试过这个:经度在“-89.69%”和“-72.07%”之间有和没有 %
但它 returns 所有记录,所以我知道它是错误的,因为某些记录的地理编码不正确(例如:14.359164)。
如何 select 仅在该范围内并允许任意小数位?
这是 latitude/longitude 列的片段:
26.219295 -81.722585
26.280398 -81.629169
26.134763 -81.795894
26.1255 -81.788166
26.403096 -81.787194
26.1219 -81.793919
26.247832 -81.82119
26.22877 -81.795777
26.25278 -81.78444
26.319679 -81.731197
26.02094 -81.685416
26.364607 -81.817356
25.9351 -81.723069
26.392275 -81.818925
40.903837 14.359164
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
比较。
我有一个查询使用了一个简单的 WHERE logitude != '0' 我虽然足以只提取已成功地理编码的记录。
我无法控制质量,也无法控制地址是否已成功地理编码,因为 table 是只读的。我只能控制我的查询。
经度通常最多保留6位小数:-81.729345
纬度和经度列的数据类型为十进制,长度为 9,小数位数为 6。
我想我需要确保我只 select 在一定的经度范围内记录?
我试过这个:经度在“-89.69%”和“-72.07%”之间有和没有 %
但它 returns 所有记录,所以我知道它是错误的,因为某些记录的地理编码不正确(例如:14.359164)。
如何 select 仅在该范围内并允许任意小数位?
这是 latitude/longitude 列的片段:
26.219295 -81.722585
26.280398 -81.629169
26.134763 -81.795894
26.1255 -81.788166
26.403096 -81.787194
26.1219 -81.793919
26.247832 -81.82119
26.22877 -81.795777
26.25278 -81.78444
26.319679 -81.731197
26.02094 -81.685416
26.364607 -81.817356
25.9351 -81.723069
26.392275 -81.818925
40.903837 14.359164
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
比较。