嗨!有人可以帮我弄清楚这个查询为什么以及如何工作吗?我无法理解其背后的逻辑。非常感谢

问题描述 投票:0回答:1

Img of Problem

-- 任务:将位置字段分为纬度和经度两列

位置字段:(37.709725805163,-122.413623946206)

-- 查询:

SELECT location,
       TRIM(leading '(' FROM LEFT(location, POSITION(',' IN location) - 1)) AS latitude,
       TRIM(trailing ')' FROM RIGHT(location, LENGTH(location) - POSITION(',' IN location) ) ) AS longitude
  FROM tutorial.sf_crime_incidents_2014_01

-- 问题:我想知道为什么这个查询有效,因为我根本不理解它。

sql trim string-function character-trimming
1个回答
0
投票

你必须从外到内阅读。这有助于将所有内容分开。

TRIM(
  leading '(' FROM 
    LEFT(
      location, 
      POSITION(',' IN location) - 1
    )
)

POSITION(',' IN location)
返回第一个
,
location
中的偏移量。在您的示例中,这是 17。减去 1 会排除逗号,16。

LEFT(location, POSITION(',' IN location) - 1)
返回
location
中给定位置左侧的所有内容:第一个
,
除了逗号之外。
(37.709725805163

最后

TRIM( leading '(' from LEFT(location, POSITION(',' IN location) - 1))
删除给定字符串
(37.709725805163
中第一个 '(' 之前(包括)的所有内容。
37.709725805163
.

请参阅 PostgreSQL 文档中的字符串函数和运算符。这些是非常标准的 SQL 字符串函数,尽管它们会因数据库而异。

你应该能够弄清楚第二个。

© www.soinside.com 2019 - 2024. All rights reserved.