使用MSSQL将二进制010101转换为Lat OR Long

时间:2014-05-26 13:31:30

标签: sql-server tsql

美好的一天,

我对T-SQL相当新,并且遇到了我需要解决的以下问题 我有一个包含二进制值的表,我需要将它们转换为Lat和Long。

Hemisphere LAT  Latitude            Hemisphere LONG   Longitude
 +              100010100100000011   -                0000110000001111111
 +              100010100100000100   +                0000110000001110011
 +              100010100010111101   +                0000110000010100100

如何从二进制值中提取lat long?我有3750 ROWS转换为Lat Long,并且想知道它是否可以在MSSQL中使用。

2 个答案:

答案 0 :(得分:0)

如果二进制值是Geometry类型,则可以执行以下操作:

SELECT 
   Geometry.Lat as [Latitude],
   Geometry.Long as [Longitude]
FROM dbo.tbl

答案 1 :(得分:0)

你应该找出你的(Lat,Long)存储的方式 - 它将取决于如何正确对待它们以获得有意义的值。 无论如何,这可以允许将2基二进制值转换为基于10的:

DECLARE @Input varchar(255) = '100010100100000011'
DECLARE @Cnt tinyint = 1
    DECLARE @Len tinyint = LEN(@Input)
    DECLARE @Output bigint = CAST(SUBSTRING(@Input, @Len, 1) AS bigint)

    WHILE(@Cnt < @Len) BEGIN
        SET @Output = @Output + POWER(CAST( 
               SUBSTRING(@Input, @Len - @Cnt, 1) * 2 AS bigint), @Cnt)    
        SET @Cnt = @Cnt + 1
    END
select @Output
--------------
141571

另外,我认为this article会对你有所帮助