sql-server - 使用纬度和经度按距离排序

标签 sql-server

我正在尝试构建一个商店定位器,但在形成我的 sql 语句时遇到了问题。到目前为止,我有以下内容:

SELECT TOP 3 Custno
    , ( 3959 
         * acos( cos( radians(36) ) 
           * cos( radians( Latitude ) ) 
           * cos( radians( Longitude )  - radians(120) )
           + sin( radians(120) ) * sin( radians( Latitude ) ) 
         ) 
       ) AS distance  
FROM Customers 
ORDER BY distance

当我运行该语句时,我得到:

Msg 0, Level 11, State 0, Line 0
A severe error occurred on the current command.  
The results, if any, should be discarded.

但是,当我删除 order by 子句以及将 order by 子句更改为使用 Custno 时,查询有效。是什么导致了这个错误,我该如何避免?

最佳答案

从 SQL Server 2008 开始,有一个 Geography 数据类型,它是为这样的事情而设计的。这里有几个链接:

http://msdn.microsoft.com/en-us/library/ff929109.aspx http://blogs.msdn.com/b/isaac/archive/2008/10/23/nearest-neighbors.aspx

关于sql-server - 使用纬度和经度按距离排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17250847/

相关文章:

sql-server - 使用其他表中的随机值更新 SQL 表

sql - 基于总和更新

sql-server - SQL查询来搜索具有特定文本的记录?

sql - 使用新列转置 SQL 中的数据

.net - 包含括号的动态 LINQ 查询的问题

SQL Server - 在需要条件的上下文中指定的非 bool 类型表达式,靠近 'RETURN'

sql-server - 可重复读取 - 我理解对吗?

sql - 除以零错误仅当在where子句中使用参数时

c# - 从 SQL Server 表中删除一行

sql-server - SQL Server 登录前握手