如何测试 SQL Server Geography 列的值是不是为 POINT(0 0)?
Posted
技术标签:
【中文标题】如何测试 SQL Server Geography 列的值是不是为 POINT(0 0)?【英文标题】:How to test if a SQL Server Geography column value is POINT(0 0)?如何测试 SQL Server Geography 列的值是否为 POINT(0 0)? 【发布时间】:2015-04-15 06:09:50 【问题描述】:以下代码可以运行,但速度非常慢:
select top 100 FooId
from dbo.Foos
where latitudelongitude.ToString() = 'POINT(0,0)'
order by FooId desc
有没有更好的方法来确定GEOGRAPHY
值是否具有0,0
的纬度/经度?
【问题讨论】:
【参考方案1】:翻转哟测试,哟。 ;)
declare @g geography = geography::STPointFromText('POINT(0 0)', 4326);
select *
from dbo.Foos
where latitudelongitude.STEquals(@g) = 1
换句话说,您最初编写的查询不是 SARGable。我写的就是。
【讨论】:
你试过了吗?好吧,我做了我的第一次尝试。失败:Invalid operator for data type. Operator equals equal to, type equals geography.
。然后我尝试了 OP 中的建议。下次请在给出答案之前进行测试。
不,你没有第一次尝试。您尝试了一些非常相似的方法,但不一样(因为没有 SRID 就不能拥有地理实例)。但你是对的;我没有先测试它。我现在已经并相应地更新了我的答案。下一次,请检查您的语气是否有人试图免费帮助您解决您遇到的问题。
啊! STEquals
...我以前从未使用过 :) 嗯。我想知道什么更高效....
试试看,但我知道 STEquals 受空间索引支持,所以我愿意花钱。
这更高效 :) 答案交换了。 (更新):是的。空间索引有帮助 - 你是赢家!【参考方案2】:
您可以使用.Lat
和.Long
来实现这一点。像这样的
SELECT TOP 100 FooId
FROM dbo.Foos
WHERE latitudelongitude.Lat = 0 AND latitudelongitude.Long = 0
ORDER BY FooId desc
【讨论】:
以上是关于如何测试 SQL Server Geography 列的值是不是为 POINT(0 0)?的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server GEOGRAPHY STIntersection 更改点顺序
在 Django 中使用 GEOGRAPHY 列更新 SQL Server 表
确定一个 POINT 是不是位于 LINESTRING 上的两个其他 POINT 之间(SQL Server 2008 Geography)
为啥 SQL Server GEOGRAPHY 允许 -15069° 和 +15069° 之间的经度?为啥是±15069°?