如何在SQL中实现类似LIKE函数的近邻数值(含小数)查询
解决FLOAT坐标按前缀匹配的问题
方法1:将FLOAT转为字符串后使用LIKE
把浮点型坐标转换为字符串类型,再用LIKE匹配前缀。针对参考坐标(67.1, -69.2),示例SQL语句如下:
SELECT * FROM your_table WHERE CAST(lat AS VARCHAR) LIKE '67.1%' AND CAST(lng AS VARCHAR) LIKE '-69.2%';
注意不同数据库的字符串转换语法有差异:MySQL用CAST(lat AS CHAR),PostgreSQL用lat::TEXT,SQL Server用CAST(lat AS NVARCHAR(20))。
方法2:通过数值计算实现前缀匹配
无需转换字符串,利用区间筛选匹配前缀的坐标。以参考坐标为例,纬度需满足67.1 ≤ lat < 67.2,经度需满足-69.3 < lng ≤ -69.2,适配五位小数的精度可微调区间:
SELECT * FROM your_table WHERE lat BETWEEN 67.1 AND 67.2 - 0.00001 AND lng BETWEEN -69.3 + 0.00001 AND -69.2;
方法3:保留指定小数位数后匹配
将坐标截断或四舍五入到参考坐标的小数位数,再直接对比数值,避免字符串转换的格式问题:
-- MySQL截断到1位小数 SELECT * FROM your_table WHERE TRUNCATE(lat, 1) = 67.1 AND TRUNCATE(lng, 1) = -69.2; -- PostgreSQL四舍五入到1位小数 SELECT * FROM your_table WHERE ROUND(lat, 1) = 67.1 AND ROUND(lng, 1) = -69.2;
内容的提问来源于stack exchange,提问作者Syarqawi Ruslan
相关产品推荐
相关产品推荐

