【问题标题】:SPLIT_STRING to get first or second partSPLIT_STRING 获取第一部分或第二部分
【发布时间】:2021-03-11 19:10:40
【问题描述】:

我一直在寻找一种方法来执行以下操作。我有一张看起来很简单的桌子

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

我想要的是

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

我查看了STRING_SPLITHow 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];

所有方法最终都在创造

【问题讨论】:

    标签: sql-server azure-sql-database sql-server-2019


    【解决方案1】:

    STRING_SPLIT 是一个表值函数,因此为它拆分出来的每个字符串返回一条记录。您不想要多条记录。您只想拆分单个字符串,因此使用CHARINDEX 查找逗号的位置,LEFTSUBSTRING 根据该位置分割字符串。这是一个使用公用表表达式 (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
    

    我的结果:

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

    也请查看How to create a Minimal, Reproducible ExampleHow does accepting an answer work?,特别是如果您发现该帖子有帮助的话。

    【讨论】:

    • 请不要将图像用于代码、数据或错误。使用格式化文本。
    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 2021-03-18
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多