SPLIT_STRING 获取第一部分或第二部分

SPLIT_STRING to get first or second part

我一直在寻找一种方法来执行以下操作。我有一个简单的 table 看起来

+-------------------+----------+----------+
| coord             | lat      | lng      |
+-------------------+----------+----------+
| 9.08273, 10.92773 |          |          |
+-------------------+----------+----------+

我要的是

+-------------------+----------+----------+
| coord             | lat      | lng      |
+-------------------+----------+----------+
| 9.08273, 10.92773 |  9.08273 | 10.92773  |
+-------------------+----------+----------+

我查看了STRING_SPLIT and also at How do I split a string so I can access item x?@SO,但似乎不存在类似

的内容
STRING_SPLIT(columnname, ', ')[1]
STRING_SPLIT(columnname, ', ')[2]

以后可以像

那样使用它
UPDATE tablename SET lat = STRING_SPLIT(columnname, ', ')[1], SET lng = STRING_SPLIT(columnname, ', ')[2];

所有方法最终都会创造

STRING_SPLIT 是一个 table 值函数,因此 returns 它拆分出的每个字符串的记录。您不想要多个记录。您只想拆分单个字符串,因此使用 CHARINDEX 查找逗号的位置,使用 LEFTSUBSTRING 根据该位置分割字符串。这是一个使用通用 Table 表达式 (CTE) 的类似技术的示例,因为您是新手:

DROP TABLE IF EXISTS dbo.yourTable
GO

CREATE TABLE dbo.yourTable ( 
    coord   VARCHAR(30), 
    lat     DECIMAL(10,5),
    lng     DECIMAL(10,5)
)
GO

INSERT INTO dbo.yourTable ( coord )
VALUES ( '9.08273, 10.92773' )
GO

;WITH cte AS (
SELECT *, CHARINDEX( ',', coord ) commaPos
FROM dbo.yourTable
)
UPDATE cte
SET lat = LEFT( coord, commaPos - 1 ), 
    lng = SUBSTRING( coord, commaPos + 1, 20 )

SELECT *
FROM dbo.yourTable

我的结果:

查看我创建测试的方式 table 和一些示例数据,并使脚本可重新运行,您可以这样做以解决以后的问题,以及您尝试过的人和人你得到的错误。这种方法通常会让你得到更好的回应,并吸引更少的反对票。我对你的问题投了赞成票,但看起来你已经落后了。

也浏览一下 How to create a Minimal, Reproducible Example and How does accepting an answer work?,特别是如果您发现 post 有帮助的话。