Sql server 使用MSSQL将二进制010101转换为Lat或Long
你好 我是T-SQL的新手,有以下问题需要解决 我有一个包含二进制值的表,我需要将它们转换为Lat和LongSql 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
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中的“创建表..”函数)