如何将此类数据分为两列:经度和纬度列

时间:2018-11-27 13:33:50

标签: sql sql-server tsql

Location(32.747156999999994 -26.994015989999998)
Location(32.06873196 -27.429944579999997)
Location(32.271466 -27.040925)
Location(32.271466 -27.040925)
Location(32.183663 -28.422186)
Location(32.753835 -26.989512)

4 个答案:

答案 0 :(得分:1)

尝试CASESUBSTRING()CHARINDEX()

SELECT   CASE WHEN CHARINDEX(' ',Location)>0 THEN SUBSTRING(Location,1,CHARINDEX(' ',Location)-1) END Longitute
        ,CASE WHEN CHARINDEX(' ',Location)>0 THEN SUBSTRING(Location,CHARINDEX(' ',Location)+1,len(Location))  END Latitude
FROM Locations

如果数据位于类似“ Location(32.753835 -26.989512)”的位置,则可以简单地REPLACE“ Location('和')”

SELECT   REPLACE(CASE WHEN CHARINDEX(' ',Location)>0 THEN SUBSTRING(Location,1,CHARINDEX(' ',Location)-1) END,'Location(','') Longitute
        ,REPLACE(CASE WHEN CHARINDEX(' ',Location)>0 THEN SUBSTRING(Location,CHARINDEX(' ',Location)+1,len(Location)) END,')','') Latitude
FROM Locations

答案 1 :(得分:1)

非常实用的方法...

使用一些简单的字符串替换,我们可以动态创建一个SQL语句并使用EXEC()来执行它:

DECLARE @YourData NVARCHAR(MAX)=
N'Location(32.747156999999994 -26.994015989999998)
Location(32.06873196 -27.429944579999997)
Location(32.271466 -27.040925)
Location(32.271466 -27.040925)
Location(32.183663 -28.422186)
Location(32.753835 -26.989512)';

DECLARE @stmt NVARCHAR(MAX) =
N'SELECT * FROM (VALUES' + 
SUBSTRING(REPLACE(REPLACE(@YourData,'Location',','),' ',','),2,100000) + 
') tbl(Long,Lat);';

EXEC(@stmt);

创建的语句如下:

SELECT * FROM 
(
 VALUES(32.747156999999994,-26.994015989999998)
      ,(32.06873196,-27.429944579999997)
      ,(32.271466,-27.040925)
      ,(32.271466,-27.040925)
      ,(32.183663,-28.422186)
      ,(32.753835,-26.989512)
) tbl(Long,Lat);

结果

Long                Lat
32.747156999999994  -26.994015989999998
32.068731960000000  -27.429944579999997
32.271466000000000  -27.040925000000000
32.271466000000000  -27.040925000000000
32.183663000000000  -28.422186000000000
32.753835000000000  -26.989512000000000

答案 2 :(得分:0)

尝试使用SUBSTRING方法,您可以在其中设置要创建新字符串的位置:

DECLARE @string VARCHAR(100) = '32.747156999999994 -26.994015989999998'
SELECT  SUBSTRING(@string, CHARINDEX(' ', @string) +1, 20)
SELECT  SUBSTRING(@string, 0, CHARINDEX(' ', @string) +1)

输出:

-26.994015989999998
32.747156999999994 

答案 3 :(得分:0)

您的数据看起来像是字符串格式,可以使用字符串索引功能来识别空间的位置并在此基础上进行分割:

select LocV,substr(LocV,0,instr(locV,' ')) as Longitute,substr(LocV,instr(LocV,' ')+1,length(LocV)) as Latitude from loc

这是演示链接:Demo