Больше текстовых функций в SQLite

В SQLite есть базовые функции для работы с текстом — instr, substr и replace (и даже trim в новых версиях). С их помощью можно много чего сделать. Но мне хотелось больше возможностей, как в PostgreSQL, Python или Go.

Поэтому я сделал расширение sqlean-text, которое содержит 25 строковых функций от slice, contains и count до split_part, translate и repeat.

Примечание. В отличие от других СУБД, добавить расширение в SQLite элементарно. Скачиваете файл, выполняете одну команду — и готово.

Многие функции совместимы с PostgreSQL (доступны под тем же именем и с той же логикой). Это может пригодиться при переносе кода из SQLite в PostgreSQL и обратно.

Текстовые функции
Некоторые из функций в SQLite уже были, но с полным набором удобнее.

Некоторые Unicode-специфичные функции вроде upper и lower доступны в отдельном расширении unicode. Функции для работы с регулярными выражениями — в расширении regexp.

Подстроки и срезы

text_substring(str, start [,length])

Вырезает фрагмент длиной в length символов, начиная с позиции start.

text_slice(str, start [,end])

Вырезает фрагмент с позиции start включительно до позиции end не включительно.

text_left(str, length)

Вырезает фрагмент длиной length символов от начала строки.

text_right(str, length)

Вырезает фрагмент длиной length символов от конца строки.

Поиск и сравнение

text_index(str, other)

Находит первую позицию, на которой фрагмент other встречается в исходной строке.

text_last_index(str, other)

Находит последнюю позицию, на которой фрагмент other встречается в исходной строке.

text_contains(str, other)

Проверяет, встречается ли фрагмент other в исходной строке.

text_has_prefix(str, other)

Проверяет, начинается ли исходная строка фрагментом other.

text_has_suffix(str, other)

Проверяет, заканчивается ли исходная строка фрагментом other.

text_count(str, other)

Считает, сколько раз фрагмент other встречается в исходной строке.

Разделение и соединение

text_split(str, sep, n)

Бьет строку по разделителю и возвращает n-ю часть.

text_concat(str, ...)

Соединяет строки.

text_join(sep, str, ...)

Соединяет строки через разделитель.

text_repeat(str, count)

Соединяет строку саму с собой указанное количество раз.

Обрезка и дополнение

text_ltrim(str [,chars])

Обрезает указанные символы с начала строки.

text_rtrim(str [,chars])

Обрезает указанные символы с конца строки.

text_trim(str [,chars])

Обрезает указанные символы с начала и конца строки.

text_lpad(str, length [,fill])

Дополняет строку до указанной длины с помощью символов fill, от начала строки.

text_rpad(str, length [,fill])

Дополняет строку до указанной длины с помощью символов fill, от конца строки.

Прочие изменения

text_replace(str, old, new [,count])

Заменяет в исходной строке фрагменты old на фрагменты new, но не более чем count раз.

text_translate(str, from, to)

Преобразует каждый символ исходной строки, который найден в наборе from, в соответствующий символ из набора to.

text_reverse(str)

Переставляет символы строки в обратном порядке.

Свойства строки

text_length(str)

Возвращает количество символов в строке.

text_size(str)

Возвращает количество байт в строке.

text_bitsize(str)

Возвращает количество бит в строке.

Установка

  1. Скачайте свежий релиз

  2. Подключите в командной строке SQLite (sqlite.exe):

sqlite> .load ./text
sqlite> select reverse('hello');

Как установить расширение для IDE, Python и других сценариев.

Документация расширения с подробным описанием.

Подписывайтесь на канал, чтобы не пропустить новые заметки 🚀