MySQL查询在一定范围内拉经度
Posted
技术标签:
【中文标题】MySQL查询在一定范围内拉经度【英文标题】:MySQL query to pull longitude within certain range 【发布时间】:2015-08-23 19:54:07 【问题描述】:我有一个使用简单 WHERE logitude != '0' 的查询,但我认为仅提取已成功进行地理编码的记录就足够了。
我无法控制质量或地址是否成功进行地理编码,因为表格是只读的。我只能控制我的查询。
经度通常最多保留 6 位小数:-81.729345
纬度和经度列的数据类型为十进制,长度为9,小数为6。
我想我需要确保只选择一定经度范围内的记录?
我试过这个:Longitude BETWEEN '-89.69%' AND '-72.07%' 有和没有 %
但它会返回所有记录,所以我知道它是错误的,因为某些记录的地理编码不正确(例如:14.359164)。
如何仅在该范围内选择并允许小数位数?
这是纬度/经度列的 sn-p:
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
【问题讨论】:
您能否运行show create table xxxx
并发布几行数据以便窥视者可视化?
@Drew,用 lat/long 的示例列更新了问题...我认为这就足够了。该表很大,并且记录本身只是标准的房地产数据,不确定在有问题的两列之外它会如何提供帮助。告诉我。
show create table xxx 产生了什么
一张大桌子……这与我的问题有什么关系?
@Drew 想知道您的 longitude
列的数据类型。这很重要。
【参考方案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
比较。
【讨论】:
完美,效果很好,解释也很好......非常感谢@ollie以上是关于MySQL查询在一定范围内拉经度的主要内容,如果未能解决你的问题,请参考以下文章
在节点 js mysql 查询中传递经度和纬度和距离作为参数