gpt4 book ai didi

MySQL查询拉取一定范围内的经度

转载 作者:行者123 更新时间:2023-11-29 12:02:15 26 4
gpt4 key购买 nike

我有一个使用简单的WHERE logitude != '0'的查询,但我足以仅提取已成功地理编码的记录。

我无法控制质量或地址是否成功地理编码,因为该表是只读的。我只能控制我的查询。

经度通常最多保留 6 位小数:-81.729345

纬度和经度列的数据类型为十进制,长度为 9,小数为 6。

我想我需要确保只选择特定经度范围内的记录?

我尝试过这个:经度在“-89.69%”和“-72.07%”之间有或没有%

但它返回所有记录,所以我知道它是错误的,因为某些记录的地理编码不正确(例如:14.359164)。

如何仅在该范围内进行选择并允许任意位数的小数?

以下是纬度/经度列的片段:

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

最佳答案

latitudelongitude 列通常具有 FLOATDOUBLE 数据类型。它们很少有 DECIMAL(10,4) 数据类型,有时出于各种原因和逻辑,它们有 VARCHAR(15) 或某些此类数据类型。

如果您的类型是 FLOATDOUBLE,则您的比较是通过算术而不是文本模式匹配完成的。所以你需要这种 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 比较。

关于MySQL查询拉取一定范围内的经度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32170860/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com