SQL 切换多边形字符串中的经纬度位置

SQL switch latitude and longitude positions in the polygon string

我有一个包含多边形信息的文本

示例数据:

{"points":[{"lat":49.454912346,"lng":-123.1000021159},{"lat":47.454912346,"lng":-122.1000021159},{"lat":55.454912346,"lng":-121.1000021159},{"lat":52.454912346,"lng":-127.1000021159},{"lat":26.454912346,"lng":-129.1000021159}]

有什么方法可以在 SQL 服务器中交换此字符串中的“lat”和“lng”?

预期结果:

{"points":[{"lng":-123.1000021159,"lat":49.454912346}

感谢任何帮助!

你这里的是 JSON。您可以使用 OPENJSON 分解信息,交换它,然后使用 FOR JSON:

重建它
DECLARE @json nvarchar(max) = '{"points":[{"lat":49.454912346,"lng":-123.1000021159},{"lat":47.454912346,"lng":-122.1000021159},{"lat":55.454912346,"lng":-121.1000021159},{"lat":52.454912346,"lng":-127.1000021159},{"lat":26.454912346,"lng":-129.1000021159}]'

SELECT j.lng, j.lat
FROM OPENJSON(@json, '$.points')
  WITH (lat decimal(18,10), lng decimal(18,10)) j
FOR JSON PATH, ROOT('points');

db<>fiddle

如果您有一个 table 想要 select,您可以这样做

SELECT
  (
    SELECT
    j.lng, j.lat
    FROM OPENJSON(t.json, '$.points')
      WITH (lat decimal(18,10), lng decimal(18,10)) j
    FOR JSON PATH, ROOT('points')
  ) AS json
FROM YourTable t;