【问题标题】:Converting SQL Geography Lat/Long to VARCHAR without loss of precision在不损失精度的情况下将 SQL Geography Lat/Long 转换为 VARCHAR
【发布时间】:2015-07-09 08:06:40
【问题描述】:

我有一个名为 Location 的地理专栏。 我需要选择 Location.Lat 和 Location.Long 作为单个 VARCHAR 结果。 使用以下我失去了精度:

查询:

SELECT CONVERT(VARCHAR(MAX), Location.Lat) + ' ' + CONVERT(VARCHAR(MAX), Location.Long)

原始位置.Lat:52.2708633333333

原位置.长:-9.73093666666667

上面的结果表格:52.2709 -9.73094

我知道这是因为 Lat 和 Long 是浮点数并且没有指定精度,因此可能的解决方法是先以指定的精度将其强制为十进制,然后将其转换为 varchar。这似乎......笨重,并且必须选择随机精度将强制任何一个

(a) 如果尾随值过低或丢失,则丢失

(b) 额外的不必要的尾随值。

请告诉我,我缺少一个函数或转换方法来将这些作为准确的 varchar 表示返回!

【问题讨论】:

  • 您最初测量纬度和经度的准确度是多少?您是否知道在小数点后第四位,您可以精确到约 10 米?你真的有更精确的测量值,以至于你需要保留额外的数字吗?
  • 是的,我认为 5 或 6 位小数就足够准确了,但不喜欢硬编码导致准确性损失的任意值(无论多小,如果它在地理值中我想用它)

标签: sql sql-server floating-point-precision floating-point-conversion sqlgeography


【解决方案1】:

你需要这样的东西:

SELECT CONVERT(VARCHAR(40),CAST(Location.Lat AS decimal(18,14))) + ' ' 
+ CONVERT(VARCHAR(40),CAST(Location.Long AS decimal(18,14))) 

【讨论】:

  • 谢谢灭霸。如果我找不到更整洁的方式,我想我将不得不使用这样的东西。
  • @KrustyGString 很高兴知道我帮忙了!
【解决方案2】:

我想我必须在这里回答我自己的问题,因为似乎没有符合条件的功能。

要获得所需的结果显然需要使用变通方法,例如首先以指定的精度将其强制为十进制,然后将其转换为 varchar(如果需要,Thanos 回答提供了此示例)

【讨论】:

  • 我认为你应该接受@Thanos 的回答而不是发布一个新的回答。
  • 我部分同意,因此将转而接受灭霸的回答,但仍未决定。我特别询问是否有什么东西,所以我不必使用像灭霸建议的解决方法,因此我自己的回答是“我正在寻找的东西不存在”,但解决方法很有用,所以会用它。
猜你喜欢
  • 2013-12-07
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
相关资源
最近更新 更多