Встроенные функции, даты и CAST
Знакомимся со встроенными функциями для строк, дат и преобразования типов.
Встроенная функция вычисляет значение из своих аргументов прямо в запросе — для каждой строки.
Строковые функции
SQLite умеет обрабатывать текст прямо в SQL. Самые ходовые функции: LENGTH (длина), SUBSTR (подстрока), REPLACE (замена), TRIM (убрать пробелы по краям), UPPER/LOWER (регистр — для латиницы).
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);
INSERT INTO users (name) VALUES (' Аня '), ('Борис');
SELECT '[' || TRIM(name) || ']' AS trimmed,
LENGTH(TRIM(name)) AS len,
SUBSTR(TRIM(name), 1, 1) AS first_letter
FROM users;
Вывод:
[Аня]|3|А [Борис]|5|Б
TRIM убрал пробелы вокруг «Аня», LENGTH посчитал символы, SUBSTR(s, 1, 1) взял первую букву. Учтите: UPPER/LOWER в стандартном SQLite меняют регистр только у латинских букв, кириллицу они не трогают.
Даты — это текст или число
Отдельного типа даты нет, но есть функции для работы с датами-строками формата ГГГГ-ММ-ДД ЧЧ:ММ:СС: date(), time(), datetime() и мощная strftime() для произвольного формата.
CREATE TABLE events (id INTEGER PRIMARY KEY, name TEXT, dt TEXT);
INSERT INTO events (name, dt) VALUES
('Старт', '2024-03-15 10:30:00'),
('Финиш', '2024-12-31 23:59:00');
SELECT name,
date(dt) AS только_дата,
strftime('%Y', dt) AS год,
strftime('%H:%M', dt) AS время
FROM events;
Вывод:
Старт|2024-03-15|2024|10:30 Финиш|2024-12-31|2024|23:59
А разницу между датами в днях даёт функция julianday(): julianday('2024-03-20') - julianday('2024-03-15') вернёт 5.0. Текущее время можно получить через datetime('now').
CAST — явное приведение типа
Иногда нужно явно превратить значение в другой тип. Это делает CAST(значение AS тип). Например, строку в число или число в текст:
SELECT CAST('42' AS INTEGER) + 8 AS chislo,
CAST(3.9 AS INTEGER) AS otbroshen_drobnyy,
typeof(CAST(5 AS TEXT)) AS tip;
Вывод:
50|3|text
Строка '42' стала числом и сложилась с 8. CAST(3.9 AS INTEGER) отбросил дробную часть (получилось 3, без округления). А CAST(5 AS TEXT) превратил число в строку — typeof это подтверждает.
Итог
- Строковые функции:
LENGTH,SUBSTR,REPLACE,TRIM,UPPER/LOWER(регистр — только латиница). - Даты хранят как текст; обрабатывают функциями
date(),strftime(),julianday(). CAST(значение AS тип)явно приводит значение к нужному типу.