использование SUBSTR для разделения значения в SQLite

#sqlite #substr

#sqlite #substr

Вопрос:

У меня есть столбец (назовем его column1 здесь) в моей базе данных с данными, отформатированными следующим образом: «x / y / z». Я хочу создать новый столбец только со значением x, и я попробовал это:

 ALTER TABLE RECORDS
ADD COLUMN name_x TEXT;
SELECT column1, SUBSTR('column1','/',1) AS new_column FROM table;
  

Новый столбец не содержит никаких данных, в то время как я ожидал x для каждой строки.

код и таблица

Ответ №1:

2-й аргумент функции SUBSTR() — это начальная позиция подстроки, которую вы хотите вернуть (в данном случае это 1), а 3-й аргумент — количество возвращаемых символов.
Итак, для 2-го аргумента вы должны использовать функцию INSTR() , чтобы найти '/' :

 SUBSTR(course_id, 1, INSTR(course_id, '/') - 1)
  

Если вы уже создали новый столбец institution , вам необходимо обновить таблицу, чтобы заполнить новый столбец:

 UPDATE records
SET institution = SUBSTR(course_id, 1, INSTR(course_id, '/') - 1)
  

Если ваша версия SQLite равна 3.31 , вы можете создать новый столбец как сгенерированный столбец следующим образом:

 ALTER TABLE records ADD COLUMN institution TEXT 
GENERATED ALWAYS AS (SUBSTR(course_id, 1, INSTR(course_id, '/') - 1));