【问题标题】:STDistance – Calculates distance between two objectsSTDistance - 计算两个对象之间的距离
【发布时间】:2015-05-20 09:46:08
【问题描述】:

我尝试计算两个物体之间的距离。

declare @p1 geography
declare @p2 geography
SELECT @p1 = WKT from tbl_1 where loc = "school"
SELECT @p2 = WKT from tbl_2 where loc = "school"
select round(@p1.STDistance(@p2)/1000,0) Distance_KM

但我收到了loc 列的错误

列名无效

此列存在且数据类型为geography

WKT 列填充使用:

UPDATE [dbo].[lbl_1]
SET [WKT] = geography::STPointFromText('POINT(' + CAST([Longitude] AS VARCHAR(20)) + ' ' + CAST([Latitude] AS VARCHAR(20)) + ')', 4326)
GO

怎么了??

【问题讨论】:

  • 你的意思是loc的地理类型列而不是VARCHAR
  • 你的表tbl_1tbl_2 都有一个列loc
  • "school" 是字符串文字还是列? sql server 将其视为一列,这就是我认为您遇到错误的原因。试试这个declare @p1 geography select 1 WHERE @p1 = "school"
  • 知道了。字符串文字“学校”在单引号之间而不是双引号之间:-((
  • 您尝试做的事情根本不正确。 'school'一个字符串怎么能等于一个GEOGRAPHY类型列loc??

标签: sql-server geography sqlgeography geographic-distance


【解决方案1】:

您的字符串文字不正确。

对于 SQL,您需要单引号,即 'school' 而不是 "school"

SQL 将其视为列而不是字符串。

【讨论】:

  • 即使 OP 使用带有地理类型的字符串文字,它也不起作用。 Invalid operator for data type. Operator equals equal to, type equals geography.
  • @ughai:谁说loc 是地理类型的? WKT 是。
  • 检查他的问题和他的评论
  • @ughai:根据他/她的回答,评论/问题中提供的信息不正确。
  • 这应该是错误的,但 OP 已经声明 loc 是 geography 两次。一次在问题中,一次在他的评论中。
猜你喜欢
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 2021-01-14
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多