将SQL地理Lat / Long转换为VARCHAR而不会降低精度

时间:2015-07-09 08:06:41

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

我有一个名为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表示返回!

2 个答案:

答案 0 :(得分:6)

你需要这样的东西:

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

答案 1 :(得分:-1)

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

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