Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 拆分字符串以获取第一部分或第二部分_Sql Server_Azure Sql Database_Sql Server 2019 - Fatal编程技术网

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
我的结果:

看看我如何创建一个测试表和一些示例数据,以及如何使脚本重新运行,你可以在将来的问题中这样做,以及谁知道你尝试了什么以及你遇到了什么错误。这种方法通常会让你得到更好的回应,吸引更少的反对票。我对你的问题投了赞成票,但看起来你已经落后了


请仔细阅读,尤其是如果您觉得这篇文章很有帮助的话。

请不要将图像用于代码、数据或错误。使用格式化文本。