-- 任务:将位置字段分为纬度和经度两列
位置字段:(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
-- 问题:我想知道为什么这个查询有效,因为我根本不理解它。
你必须从外到内阅读。这有助于将所有内容分开。
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 字符串函数,尽管它们会因数据库而异。
你应该能够弄清楚第二个。