SQL Server经度和纬度数据类型

49

我想询问在SQL Server中用什么数据类型来存储纬度和经度。

以下是一个例子:

Latitude: -7.39755000
Longitude: 107.80627000

如果数据类型为decimal,由于SQL Server说:

无法将数字数据转换为数字

据我所记得的。

但是如果数据类型是float,SQL Server将会将0转换为-7.39755000的纬度。因此我想到用1-9替换最后一个0。这样位置是否不准确?

或者也许坚持使用decimal,但如何避免警告?

1个回答

78

DECIMAL(9,6)通常是我使用的精度。如果您需要更高的精度,请尝试使用DECIMAL(12,9)

您也可以使用GEOGRAPHY数据类型,但它会占用更多的空间,并且我只建议在需要SQL服务器的空间特性(索引等)时使用。

有关实际转换,请尝试以下内容:

CAST(@YourLat AS DECIMAL(12,9))

这是用于选择的查询吗?当我使用数据类型为decimal(10,8)保存数据时,出现错误,它说“算术溢出错误将数字转换为数据类型数字”@g2server - Bobby Z
3
DECIMAL(10,8) 无法使用,因为经度和纬度的格式可以是 xxx.xxxxxx(10 位数),所以请尝试使用 DECIMAL(12,9)。 - g2server
9
纬度的范围是[-90;90],因此可以使用“DECIMAL(8,6)”进行存储。经度的范围是[-180;180],因此应该使用“DECIMAL(9,6)”进行存储。为了保持一致性,我认为应该优先选择对两者都使用“DECIMAL(9,6)”。 - Jogge
@Jogge同意并感谢您的澄清。Lat可以采用“xx.xxxxxx”的格式,但不是我之前错误地提到的“xxx.xxxxxx”。 - g2server

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接