Скриншот, иллюстрирующий проблему
ЗАДАЧА: разделить столбец location на два столбца для широты и долготы.
Столбец местоположения:
(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
ПРОБЛЕМА: Я хочу знать, почему этот запрос работает, потому что я его вообще не понимаю.
Это называется Режим. Я размещаю ссылку на него прямо здесь mode.com/sql-tutorial/sql-string-functions-for-cleaning
Найдите положение запятой. Возьмите материал слева от него и обрежьте ведущую часть (, и вы получите широту. и т. д.


Вы должны читать это снаружи внутрь. Это помогает распределить все это.
TRIM(
leading '(' FROM
LEFT(
location,
POSITION(',' IN location) - 1
)
)
POSITION(',' IN location) возвращает смещение первого , в location. В вашем примере (37.709725805163, -122.413623946206) это 17. При вычитании единицы запятая исключается, 16.
LEFT(location, POSITION(',' IN location) - 1) оценивает в вашем примере left(location, 16) и возвращает все location, что осталось от заданной позиции: сначала ,, кроме запятой. (37.709725805163.
Наконец, TRIM( leading '(' from LEFT(location, POSITION(',' IN location) - 1)) оценивается как TRIM( leading '(' from (37.709725805163) и удаляет все из строки до нее, включая первый '('. 37.709725805163.
Вы должны быть в состоянии выяснить второе.
Черт возьми, да. Я получаю это сейчас. Большое спасибо, это была огромная помощь
Какую базу данных вы используете?