gpt4 book ai didi

sql-server - 用 TSQL 替换字符串中的每个第二个字符实例

转载 作者:行者123 更新时间:2023-12-03 03:01:15 25 4
gpt4 key购买 nike

我有一个字段,其中包含定义地理围栏(多边形)的纬度/经度坐标字符串。每个都用逗号分隔。

例如:'纬度,经度,纬度,经度,纬度,经度'
例如: 148.341158,-21.500773,148.341406,-21.504989,148.375136,-21.513174,148.401674,-21.535247,148.418044,-21.532767,148.40886 7,-21.511685,148.414075,-21.508461,148.36968,-21.432567,148.349094,-21.438768,148.346862,- 21.480187,148.341158,-21.500773,

我想将其与 MSSQL 中的地理类型一起使用 ( http://msdn.microsoft.com/en-us/library/bb933971.aspx )

DECLARE @g geography;
SET @g = geography::STPolyFromText('POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326);
SELECT @g.ToString();

这似乎需要:“lat long,lat long,lat long”,即:一对之间没有逗号。

我无法更改源数据,因为它由供应商程序使用。我需要操作字符串以删除每 2 个逗号中的 1 个,或者如果失败,请让正则表达式在 TSQL 中工作

最佳答案

您可以使用 numbers table (顺便说一句, a very handy tool for many purposes )查找所有逗号的位置,然后仅使用奇数位置编号,在单个 SELECT 语句中将相应的逗号替换为空格。这就是我要说的内容:

WITH CTE AS (
SELECT number, rn = ROW_NUMBER() OVER (ORDER BY number)
FROM master.dbo.spt_values
WHERE type = 'P'
AND number BETWEEN 1 AND LEN(@coords)
AND SUBSTRING(@coords, number, 1) = ','
)
SELECT
@coords = STUFF(@coords, number, 1, ' ')
FROM CTE
WHERE rn % 2 = 1
;

在上面的查询中,数字表的“部分”由system table master.dbo.spt_values的子集“播放”。 。 CTE计算 @coords 字符串中所有逗号的位置,并将结果作为行集返回。主要的 SELECT 使用赋值语句。它获取CTE集中的每个number,并删除@coords中相应位置的字符,将其替换为空格字符(全部用STUFF 函数的帮助)。

您可以使用这个SQL Fiddle demo来玩查询。

关于sql-server - 用 TSQL 替换字符串中的每个第二个字符实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19148161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com