Sql server 拆分字符串以获取第一部分或第二部分
我一直在寻找一种方法来做以下事情。我有一张看起来很简单的桌子Sql server 拆分字符串以获取第一部分或第二部分,sql-server,azure-sql-database,sql-server-2019,Sql Server,Azure Sql Database,Sql Server 2019,我一直在寻找一种方法来做以下事情。我有一张看起来很简单的桌子 +-------------------+----------+----------+ | coord | lat | lng | +-------------------+----------+----------+ | 9.08273, 10.92773 | | | +-------------------+----------+----------+
+-------------------+----------+----------+
| coord | lat | lng |
+-------------------+----------+----------+
| 9.08273, 10.92773 | | |
+-------------------+----------+----------+
我想要的是
+-------------------+----------+----------+
| coord | lat | lng |
+-------------------+----------+----------+
| 9.08273, 10.92773 | 9.08273 | 10.92773 |
+-------------------+----------+----------+
我看了看,也看了看@SO,但似乎不存在类似的东西
STRING_SPLIT(columnname, ', ')[1]
STRING_SPLIT(columnname, ', ')[2]
以后再使用这个,可能是这样的方式
UPDATE tablename SET lat = STRING_SPLIT(columnname, ', ')[1], SET lng = STRING_SPLIT(columnname, ', ')[2];
所有的方法最终都会创建
STRING\u SPLIT
是一个表值函数,因此它会为拆分出的每个字符串返回一条记录。您不需要多个记录。您只需要拆分一个字符串,因此使用CHARINDEX
查找逗号的位置,使用左
和子字符串
根据该位置拆分字符串。下面是一个使用公共表表达式(CTE)的类似技术的示例,即新的n all:
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
我的结果:
看看我如何创建一个测试表和一些示例数据,以及如何使脚本重新运行,你可以在将来的问题中这样做,以及谁知道你尝试了什么以及你遇到了什么错误。这种方法通常会让你得到更好的回应,吸引更少的反对票。我对你的问题投了赞成票,但看起来你已经落后了
请仔细阅读,尤其是如果您觉得这篇文章很有帮助的话。请不要将图像用于代码、数据或错误。使用格式化文本。