在不损失精度的情况下将 SQL 地理 Lat/Long 转换为 VARCHAR
Converting SQL Geography Lat/Long to VARCHAR without loss of precision
我有一个名为 Location 的地理列。
我需要 SELECT Location.Lat 和 Location.Long 作为单个 VARCHAR 结果。
使用以下我失去精度:
查询:
SELECT CONVERT(VARCHAR(MAX), Location.Lat) + ' ' + CONVERT(VARCHAR(MAX), Location.Long)
Original Location.Lat: 52.2708633333333
Original Location.Long: -9.73093666666667
Result form above: 52.2709 -9.73094
我知道这是由于 Lat 和 Long 是浮点数并且没有指定精度,因此可能的解决方法是强制它首先以指定的精度转换为小数,然后将其转换为 varchar。这看起来.....笨拙,并且必须选择随机精度将强制
(a) loss of trailing values if it is too low or
(b) additional unnecessary trailing values.
请告诉我,我缺少一个函数或转换方法 return 这些作为准确的 varchar 表示!
你需要这样的东西:
SELECT CONVERT(VARCHAR(40),CAST(Location.Lat AS decimal(18,14))) + ' '
+ CONVERT(VARCHAR(40),CAST(Location.Long AS decimal(18,14)))
我想我必须在这里回答我自己的问题,因为似乎没有符合标准的功能。
为了获得理想的结果显然需要使用变通方法,比如首先以指定的精度将其强制为小数,然后将其转换为 varchar(如果需要,Thanos 回答提供了示例)
我有一个名为 Location 的地理列。 我需要 SELECT Location.Lat 和 Location.Long 作为单个 VARCHAR 结果。 使用以下我失去精度:
查询:
SELECT CONVERT(VARCHAR(MAX), Location.Lat) + ' ' + CONVERT(VARCHAR(MAX), Location.Long)
Original Location.Lat:
52.2708633333333
Original Location.Long:
-9.73093666666667
Result form above:
52.2709 -9.73094
我知道这是由于 Lat 和 Long 是浮点数并且没有指定精度,因此可能的解决方法是强制它首先以指定的精度转换为小数,然后将其转换为 varchar。这看起来.....笨拙,并且必须选择随机精度将强制
(a) loss of trailing values if it is too low or
(b) additional unnecessary trailing values.
请告诉我,我缺少一个函数或转换方法 return 这些作为准确的 varchar 表示!
你需要这样的东西:
SELECT CONVERT(VARCHAR(40),CAST(Location.Lat AS decimal(18,14))) + ' '
+ CONVERT(VARCHAR(40),CAST(Location.Long AS decimal(18,14)))
我想我必须在这里回答我自己的问题,因为似乎没有符合标准的功能。
为了获得理想的结果显然需要使用变通方法,比如首先以指定的精度将其强制为小数,然后将其转换为 varchar(如果需要,Thanos 回答提供了示例)