我使用MySQL找到了这个问题的一大堆答案,但我无法将任何内容转换为MSSQL2008可以使用的查询.对于数据库中的每一行,我都有一个经度和纬度列.我将有一个用户所在的纬度和经度.我希望能够找到距离用户纬度/经度x英里内的所有行.此外,当try 使用我在上找到的其他查询时,我一直收到错误-'pow' is not a recognized built-in function name.,这很奇怪,因为我非常确定我以前在SQL2008中使用过pow.在这方面的任何帮助都将不胜感激.到目前为止,这是我们能找到的最接近的了.

select * from tbl_MyTable
WHERE (
POW( ( 69.1 * ( Longitude - @longitude ) * cos( @latitude / 57.3 ) ) , 2 ) + POW( ( 69.1 * ( Latitude - @latitude ) ) , 2 )
) < ( 5 *5 );

推荐答案

由于您使用的是SQL2008,请考虑使用原生地理空间功能.你可以做一些奇特的事情,比如:

  • 创建表示您的点的地理类型的持久化计算列.
  • 在计算列上创建空间索引.这将使yourPoint.STDistance(@otherPoint) <= @distance件事变得更有效率.

如下所示:

alter table [yourTable] add [p] as geography::Point(Latitude, Longitude, 4326) persisted;
create spatial index [yourSpatialIndex] on [yourTable] ([p])

declare @Latitude float = <somevalue>, @Longitude float = <somevalue>;
declare @point geography = geography::Point(@Latitude, @Longitude, 4326);
declare @distance int = <distance in meters>;

select * from [yourTable] where @point.STDistance([p]) <= @distance;

Database相关问答推荐

芭蕾舞女演员坚持 1:N 关系

数据库是序列图中的控制器还是边界?

复制 MySQL 数据库的最简单方法?

聊天的数据库模式:私有和群组

Oracle 和 SQL Server 中的 NVARCHAR 之间的区别?

db:schema:load vs db:migrate with capistrano

向表中添加大量索引是否有缺点?

mysql,dump,数据库restore恢复

我们如何保存在 sqlite3 中创建的数据库

您如何在数据库中构造配置数据?

从数据库行在 Golang 中创建map

什么是数据仓库?

显示包含特定表的所有数据库名称

如何从 T-SQL 中的表中 Select 前 N 行?

我应该在数据库模式中允许空值吗?

TransactionScope 是如何工作的?

Rails:'schema.rb' 中的版本号是否用于任何用途?

数据库 - (行或记录、列或字段)?

是否有用于 postgresql 的数据可视化工具,它也能够显示模式间关系?

数据库事务是否防止竞争条件?