sql 计算两个点之间之间的距离 mysql

本文介绍了一种使用SQL查询计算两点间地理距离的方法,通过解析纬度(lat)和经度(lon)参数,运用三角函数和地球平均半径进行精确计算。此方法适用于地理信息系统(GIS)和位置服务应用。

昀:
select *,ACOS(SIN((#{lat} * 3.1415) / 180 ) *SIN((substring(points,’,’,-1) * 3.1415) / 180 ) +COS((#{lat} * 3.1415) / 180 ) * COS((substring(points,’,’,-1) * 3.1415) / 180 ) *COS((#{lon} * 3.1415) / 180 - (substring(points,’,’,1) * 3.1415) / 180 ) ) * 6378140 dis
FROM t_store
where active=1
order by dis
limit #{page},#{pageSize};

昀:
lat是代表纬度,lon是代表经度,substring(points,’,’,-1)是纬度,substring(points,’,’,-1)是经度

### SQL计算两个时间差值的方法 在 SQL 中,不同的数据库管理系统提供了多种方法来计算两个时间之间的差值。以下是针对主流数据库的具体实现方式。 #### 1. **SQL Server 中的时间差计算** 在 SQL Server 中,可以使用 `DATEDIFF` 函数来计算两个时间之间的差异。该函数接受三个参数:要比较的时间单位(如日、小时、分钟)、起始时间和结束时间[^1]。 ```sql DECLARE @StartTime DATETIME = '2023-05-01 14:00:00' DECLARE @EndTime DATETIME = '2023-05-07 10:00:00' SELECT DATEDIFF(HOUR, @StartTime, @EndTime) AS HoursDifference ``` 上述代码片段展示了如何计算两个时间之间的小时数差异。如果需要其他单位的差异,只需更改第一个参数即可,例如 `'MINUTE'`, `'DAY'` 等[^1]。 --- #### 2. **MySQL 中的时间差计算** 在 MySQL 中,同样有多个函数可以帮助我们完成这一任务。最常用的是 `TIMESTAMPDIFF` 函数,它可以精确到秒级别,并支持多种时间间隔作为输入参数[^3]。 ```sql SET @StartTime = '2023-05-01 14:00:00'; SET @EndTime = '2023-05-07 10:00:00'; SELECT TIMESTAMPDIFF(HOUR, @StartTime, @EndTime) AS HoursDifference; ``` 这段脚本实现了与前面相同的逻辑——求取两时间戳间的小时差距。值得注意的是,这里的语法稍作调整以适应 MySQL 的特性[^3]。 --- #### 3. **PostgreSQL 中的时间差计算** 对于 PostgreSQL 用户来说,可以直接利用区间类型 (`INTERVAL`) 来表示和操作时间跨度。这种方式不仅直观而且功能强大。 ```sql WITH time_data AS ( SELECT timestamp '2023-05-01 14:00:00' AS start_time, timestamp '2023-05-07 10:00:00' AS end_time ) SELECT EXTRACT(EPOCH FROM (end_time - start_time)) / 3600 AS hours_difference FROM time_data; ``` 在此例中,通过提取 Epoch 秒数再除以 3600 得到了总的小时数。这种方法特别适合那些希望得到高精度结果的应用场景[^4]。 --- #### 4. **Oracle 数据库中的时间差计算** 最后,在 Oracle 数据库环境中,则可借助简单的减法运算符配合内置函数达成目标。 ```sql SELECT ABS((TO_DATE('2023-05-07 10:00:00', 'YYYY-MM-DD HH24:MI:SS') - TO_DATE('2023-05-01 14:00:00', 'YYYY-MM-DD HH24:MI:SS'))) * 24 AS HoursDifference FROM dual; ``` 这里乘以 24 是因为默认情况下日期相减的结果是以天为单位给出的,所以为了获得小时数就需要做相应的转换[^5]。 --- ### 总结 无论采用哪种具体的 RDBMS ,核心思路都是找到合适的工具或路径去量化所关心的那个维度上的变化量 。根据实际环境选取恰当的方式能有效提升工作效率同时减少错误发生几率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值