Sql server 使用MSSQL将二进制010101转换为Lat或Long

Sql server 使用MSSQL将二进制010101转换为Lat或Long,sql-server,tsql,Sql Server,Tsql,你好 我是T-SQL的新手,有以下问题需要解决 我有一个包含二进制值的表,我需要将它们转换为Lat和Long Hemisphere LAT Latitude Hemisphere LONG Longitude + 100010100100000011 - 0000110000001111111 + 100010100100000100 + 000

你好

我是T-SQL的新手,有以下问题需要解决 我有一个包含二进制值的表,我需要将它们转换为Lat和Long

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

如何从二进制值中提取lat long?我有3750行要转换为Lat-Long,我想知道在MSSQL中是否有可能。

如果二进制值是几何类型,您可以这样做:

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

您应该了解(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
DECLARE@Input varchar(255)='100010100100000011'
声明@Cnt tinyint=1
声明@Len tinyint=Len(@Input)
声明@Output bigint=CAST(子字符串(@Input,@Len,1)为bigint)
当(@Cnt<@Len)开始时
设置@Output=@Output+功率(强制转换(
子字符串(@Input,@Len-@Cnt,1)*2作为bigint,@Cnt)
设置@Cnt=@Cnt+1
结束
选择@Output
--------------
141571

另外,我想这对您也有帮助

您可以为您使用的表列“纬度”、“经度”指定确切的数据类型(请尝试SSMS中的“创建表..”函数)