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
查找逗号的位置,使用 LEFT
和 SUBSTRING
根据该位置分割字符串。这是一个使用通用 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 有帮助的话。
我一直在寻找一种方法来执行以下操作。我有一个简单的 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
查找逗号的位置,使用 LEFT
和 SUBSTRING
根据该位置分割字符串。这是一个使用通用 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 有帮助的话。