如果它们是文本字段,我如何根据地理位置在SQL Server 2012中选择点

时间:2014-05-28 18:58:19

标签: sql sql-server-2012 nvarchar geographic-distance

好吧,我有点被这个数据库困住了,而且我正试图在附近做一个""页面。

我拥有(不幸的是)latlonnvarchar。我无法转换它们,因为它们在其他地方需要作为文本。

我想拿地图点中心,并在一英里左右的地方放一些点。

我可以以某种方式将这两个文本字段连接到一个坐标列中以比较STDistance吗?

做这样的事情..

SELECT * 
FROM goelocs 
WHERE coords.STDistance(geography::Point(54.1020, -115.12338, 4326)) <=(1609.344) 

或者你能推荐一种更好的方法吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

如果您的NVarchar列只是数字值,例如:

  • lat:'54 .103'
  • lon:' - 115.1'

SQL Server将隐式将它们转换为float。以下查询将起作用:

SELECT *
FROM geolocs geo
WHERE
    ISNUMERIC(geo.lat) = 1
    AND ISNUMERIC(geo.lon) = 1
    AND geography::Point(geo.lat, geo.lon, 4326).STDistance(geography::Point(54.1020, -115.12338, 4326)) <= (1609.344)