#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));