sql-server - SQL Server 2008 - 查询空间数据

标签 sql-server

我有一个已迁移到 SQL Server 2008 的 SQL Server 数据库。我想利用空间功能。但是我的数据使用的是更传统的数据类型。例如,我有以下两个表:

Location
--------
ID char(36)
Address nvarchar (256)
City nvarchar (256)
State char (2)
PostalCode char (10)

Order
-----
LocationID char(36)
Product nvarchar(30)
Quantity int
TotalPrice decimal

如何使用 SQL Server 2008 的空间特性获取特定邮政编码 10 英里半径范围内的订单?

谢谢!

最佳答案

您需要在Location 表中存储纬度和经度,您还需要拥有邮政编码的纬度和经度。

SQL Server 只能使用坐标。您可能想使用 reverse geocoding获取您所在位置坐标的服务。

无论如何,这就是您的地理空间查询在 SQL Server 2008 中的样子:

DECLARE @some_point geography;
SET @some_point = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);

SELECT
    Order.Product
FROM
    Order
INNER JOIN
    Location ON (Location.ID = Order.LocationID)
WHERE
    Location.Position.STDistance(@some_point) < 16093;

以上假定您的 Location 表将有一个类型为 geography 的字段称为 Position

关于sql-server - SQL Server 2008 - 查询空间数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2252636/

相关文章:

SQLXML 没有 XML 编码?

sql - 在字符串中查找子字符串

c# - 从 C# 中的存储过程返回行 ID?

sql-server - 什么时候触发,什么时候不触发

SQL如何连接具有不同列和连接的两个查询

sql - 查询列出拥有多张发票的客户的所有发票

sql - 为什么 SQL 评估的 WHERE 子句为 False?

sql-server - SQL Server - SSRS - 在哪里可以找到生成报告的查询

c# - 会计数据库 - 存储贷方和借方?

sql-server - 查找所有带有列名的表名?