在sql中从字符串中拆分lat和long

在sql中从字符串中拆分lat和long,sql,sql-server,Sql,Sql Server,我有一个字符串,我需要从中拆分lat和long值,我如何在sql代码中做到这一点 其中一个字符串的示例?我想将这两个值保存到数据库中的两列中 加拿大:马尼托巴省53.760861-98.813876 我只是为了便于阅读而将变量分开。使用子字符串是一种方法,但可能更有效地标记化 只要格式是一致的,就应该满足您的需要: DECLARE @ValueToParse VARCHAR(255) = 'Canada: Manitoba 53.760861 -98.813876', @Latitude VAR

我有一个字符串,我需要从中拆分lat和long值,我如何在sql代码中做到这一点

其中一个字符串的示例?我想将这两个值保存到数据库中的两列中

加拿大:马尼托巴省53.760861-98.813876


我只是为了便于阅读而将变量分开。使用子字符串是一种方法,但可能更有效地标记化

只要格式是一致的,就应该满足您的需要:

DECLARE @ValueToParse VARCHAR(255) = 'Canada: Manitoba 53.760861 -98.813876', @Latitude VARCHAR(25), @Longitude VARCHAR(25)
SELECT  @Latitude = SUBSTRING(@ValueToParse, (PATINDEX('% -%',@ValueToParse) - 9), 9),
        @Longitude = SUBSTRING(@ValueToParse, PATINDEX('% -%',@ValueToParse) + 1, 11)
SELECT @Latitude, @Longitude
如果要从表“YourTable”中解析包含lat/long数据的列“ColumnWithDataToSplit”,请执行以下操作:

SELECT 
    ColumnWithDataToSplit, 
    SUBSTRING(ColumnWithDataToSplit, (PATINDEX('% -%',ColumnWithDataToSplit) - 9), 9) AS [Latitude],
    SUBSTRING(ColumnWithDataToSplit, PATINDEX('% -%',ColumnWithDataToSplit) + 1, 11) AS [Longitude]
FROM YourTable

每行的格式都是这样吗?国家/地区:省/州/州/标记字符串。看一看No some Have just state,但是lat和long总是在字符串的末尾,第二个数字前面总是有一个-,第一个数字总是2位数,然后是一个句号。啊。。在这种情况下。。使用我的解决方案查找“.”可以更好地工作(我提供了一个带有空格的解决方案)。主要的区别是第一次查找charindex('.',STRING,1)和子字符串(STRING,theX-3,theY-theX-3)感谢您的回复,所以“STRING”是我要拆分的值,@text的意思是什么?我不能让这个例子用我的表格中的列名替换你的列名?啊,这个例子很好,但是我有一个表格要拆分,我怎么能用表格中的列名替换文本?如果长/滞后不是负的,它将如何工作?您正在查找此模式:“-%”在注释中,OP声明第二个数字之前始终有一个“-”。请参阅最新编辑,以便从多个记录的表中执行此操作。我尝试了此操作,但没有正确拆分
SELECT 
    ColumnWithDataToSplit, 
    SUBSTRING(ColumnWithDataToSplit, (PATINDEX('% -%',ColumnWithDataToSplit) - 9), 9) AS [Latitude],
    SUBSTRING(ColumnWithDataToSplit, PATINDEX('% -%',ColumnWithDataToSplit) + 1, 11) AS [Longitude]
FROM YourTable