在SQL Server中将字符串值转换为Geography数据类型

时间:2017-05-18 13:21:13

标签: sql-server

我有一个包含Location列的表。此列是目前存储在电子表格中的varchar(255)。它包含一个较长的SRID字符串值,如下例所示:this._taskListService.getTaskList({userId: '012345'})...

问题,我需要按原样获取该值,并将其作为地理数据类型存储在我的地址表中。当我查看地址表时,我看到存在的其他位置数据,它看起来与我上面的示例值完全相同。

但是,当我尝试使用Select语句中的0xE6100000010C61C3D32B65A14440C4B12E6EA3BD5BC0时,出现此错误:

  

在执行用户定义的例程或聚合“地理位置”期间发生了.NET Framework错误:

     

System.FormatException:24114:输入的已知文本(WKT)中的标签0xE6100000010C1F6FA8无效。有效标签是POINT,LINESTRING,POLYGON,MULTIPOINT,MULTILINESTRING,MULTIPOLYGON,GEOMETRYCOLLECTION,CIRCULARSTRING,COMPOUNDCURVE,CURVEPOLYGON和FULLGLOBE(仅限地理数据类型)。       System.FormatException:...

如何将此现有Convert(Geography, Location)数据转换或转换为地址表中已存在的地理位置数据?

1 个答案:

答案 0 :(得分:1)

您可以使用geography :: STGeomFromWKB,它需要二进制值和SRID作为输入。 你有一个存储在varchar中的二进制值,并将其转换/转换为二进制的问题实际上会使它变得不同。

请参阅:https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql关于二进制数据类型。

尝试详细说明以下示例(适用于我的SQL 2014):

DECLARE @location varchar(255)='0xE6100000010C61C3D32B65A14440C4B12E6EA3BD5BC0'

DECLARE @binlocation varbinary (max)=CONVERT(varbinary(max), @location, 1)

DECLARE @b geography

SET @b=@binlocation

SELECT @b.ToString()