Привет! Может кто-нибудь помочь мне понять, почему и как работает этот запрос? Я не могу понять логику этого. спасибо

Скриншот, иллюстрирующий проблему

ЗАДАЧА: разделить столбец 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

ПРОБЛЕМА: Я хочу знать, почему этот запрос работает, потому что я его вообще не понимаю.

Какую базу данных вы используете?

Schwern 24.03.2024 21:17

Это называется Режим. Я размещаю ссылку на него прямо здесь mode.com/sql-tutorial/sql-string-functions-for-cleaning

Mauricio 24.03.2024 21:20

Найдите положение запятой. Возьмите материал слева от него и обрежьте ведущую часть (, и вы получите широту. и т. д.

Martin Smith 24.03.2024 21:25
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
3
3
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны читать это снаружи внутрь. Это помогает распределить все это.

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.

Вы должны быть в состоянии выяснить второе.

Черт возьми, да. Я получаю это сейчас. Большое спасибо, это была огромная помощь

Mauricio 24.03.2024 21:57

Другие вопросы по теме