SqlServer資料查詢距離指定座標附近的資料

2022-02-07 23:23:14 字數 1118 閱讀 7301

實現原理,根據球面計算公式,計算兩點間的距離。

由於地球是乙個不規則的橢球體,當前計算方法,還是有很大的誤差在。但能基本實現附近查詢。

函式:返回兩個座標之間的公里數

/****mssql函式:計算經緯度****************************/

create function [getdistance]

( @gpslng decimal(12,6),

@gpslat decimal(12,6),

@lng decimal(12,6),

@lat decimal(12,6)

)returns decimal(12,4)

asbegin

declare @result decimal(12,4)

select @result=6371.004*acos(sin(@gpslat/180*pi())*sin(@lat/180*pi())+cos(@gpslat/180*pi())*cos(@lat/180*pi())*cos((@gpslng-@lng)/180*pi()))

return @result

end

使用示例:

--查詢資料庫中5公里內的記錄

select * from (

select dbo.getdistance(36.6513750000,116.9046970000,latitude,longitude)as dis from cards

) bwhere dis<5

order by dis asc;

sql查詢語句:

select *,getdistance(某一點的經度,某一點的緯度,資料庫中經度,資料庫中緯度)as dis from 表名   dis<5

查詢資料庫中5公里內的記錄

注:6371.004  地球半徑

6371.004*acos(sin(@gpslat/180*pi())*sin(@lat/180*pi())+cos(@gpslat/180*pi())*cos(@lat/180*pi())*cos((@gpslng-@lng)/180*pi())) 

計算公式 可查球面弧長計算公式的詳細解釋

原文出處:

sql server 資料查詢優化

前幾周做專案遇到問題與大家分享 因讀取資料關聯n個表,我大部份都採用子查詢 in 當時資料量在10000記錄級內,而且在本地伺服器執行速度都比較快。當再一次匯入幾w條記錄後多表關聯 in 就宕機。然後瘋狂網上搜解決方案。查詢速度慢的原因很多,常見如下幾種 1 沒有索引或者沒有用到索引 2 i o吞吐...

SQL Server資料查詢之聯接查詢

四 聯接查詢 1.聯接 1.1內聯接 inner join 1.2外聯接 outer join 1.2.1左聯接 left join 1.2.2右聯接 right join 1.3交叉聯接 cross join 2.內聯接與自聯接 內聯接 作用於兩個表,一般通過兩個表中相同的字段的關係 建立聯絡 自...

SQL Server中資料查詢基礎

一.資料查詢基礎 1.查詢所有資料 select from 表名 2.根據限制條件查詢資料 select from 表名 where 限制條件 3.根據特定列進行排序,預設為公升序排列 select from 表名 order by 排序列名 公升序 降序 4.使用別名as select stude...