Как использовать Substr с выражением F
Я пытаюсь создать набор Func
классов, построенных на fuzzystrmatch
расширении postgres.
Например, у меня есть эта обертка, которая принимает выражение Expression и поисковый запрос и возвращает расстояние Левенштейна:
class Levenshtein(Func): """This function calculates the Levenshtein distance between two strings:""" template = "%(function)s(%(expressions)s, '%(search_term)s')" function = "levenshtein" def __init__(self, expression, search_term, **extras): super(Levenshtein, self).__init__( expression, search_term=search_term, **extras )
Вызывается так, используя F Expression
:
Author.objects.annotate(lev_dist=Levenshtein(F('name'),'JRR Tolkien').filter(lev_dist__lte=2)
Однако если поле 'name'
здесь больше 255, то возникает ошибка:
И источник, и цель могут быть любой не нулевой строкой, максимум 255 символов.
Я могу усечь имя, когда аннотирую с помощью Substr
:
Author.objects.annotate(clipped_name=Substr(F('name'),1,250))
Но я не могу понять, как разместить эту логику внутри func, который я размещаю внутри ExpressionWrapper
и устанавливаю output_field
согласно документации :
class Levenshtein(Func): """This function calculates the Levenshtein distance between two strings:""" template = "%(function)s(%(expressions)s, '%(search_term)s')" function = "levenshtein" def __init__(self, expression, search_term, **extras): super(Levenshtein, self).__init__( expression=ExpressionWrapper(Substr(expression, 1, 250), output_field=TextField()), search_term=search_term, **extras )
Хотя в документации это не очень понятно, просто путем экспериментов выяснилось, что ответ заключается в удалении дополнительного определения expression
и передаче ExpressionWrapper
непосредственно в качестве первого аргумента:
class Levenshtein(Func): """This function calculates the Levenshtein distance between two strings:""" template = "%(function)s(%(expressions)s, '%(search_term)s')" function = "levenshtein" def __init__(self, expression, search_term, **extras): super(Levenshtein, self). __init__( ExpressionWrapper(Substr(expression, 1, 250), output_field=TextField()), search_term=search_term, **extras )
Вернуться на верх
Последние вопросы и ответы
VSCode Django HTML, JS, CSS guide for proper autocomplete and linting
Attach, display and submit forms to each product id displayed within a for loop (Django)
How can I download an audio mp3 file and save it?
Deploy django as a api url using nginx and gunicorn
How to deploy Django App on Ubuntu using Apache2 and mod-wsgi-pytho3
Unable to upload images as Django admin
Referral code and notification showing in user dashboard
Update model instance foreign key field upon creation of an instance of another model
Implementing django-recaptcha in Django project with a custom user and django-allauth
unable to understand how the group name is defined based on the chat room name while making a chat application using channels
Рекомендуемые записи по теме
Python 3. 11: новые классные возможности, которые вы можете попробовать
Полное руководство по множествам в Python
Представления на основе классов или функции в Django?
Константы Python: Улучшение управляемости вашего кода
Параллелизм, конкурентность и AsyncIO в Python — на примере
Современный Python: начинаем проект с pyenv и poetry
Рабочий процесс проекта Python
Настройка проекта Python — виртуальные среды и управление пакетами
Использование requests в Python — тайм-ауты, повторы, хуки
Понимание декораторов в Python
Строковые функции PostgreSQL | Пример строковых функций в PostgreSQL
PostgreSQL — мощная система управления объектно-реляционными базами данных. Он предоставляет множество функций и операторов для встроенных типов данных, тем самым освобождая разработчиков от более простых задач и фокусируясь на решении более крупной проблемы. Одной из таких встроенных функций являются строковые функции PostgreSQL. Форматирование строк, такое как объединение, отображение в определенном формате, вставка/удаление подстрок и т. д., иногда может быть утомительной задачей. Строковые функции PostgreSQL позаботятся об этом за вас.
PostgreSQL имеет множество функций, которые не определены в стандартных функциях SQL. Это предоставляет разработчикам широкий спектр функций, которые можно использовать для решения более крупной проблемы.
Чтобы проиллюстрировать различные функции PostgreSQL String, нам сначала нужно создать базу данных. Во всех примерах будет упоминаться следующая база данных:
Примеры строковых функций в PostgreSQL
Здесь мы обсудим, как использовать строковую функцию в PostgreSQL.
1. ASCII(str)
Возвращает значение ASCII крайнего левого символа строки str.
SELECT FirstName, ASCII(FirstName) from Person
2. BIT_LENGTH(str)
Возвращает длину строки str в битах.
SELECT FirstName, BIT_LENGTH(FirstName) from Person
3. CHAR_LENGTH(str) / CHARACTER_LENGTH(str)
Возвращает длину строки str в символах.
SELECT FirstName, CHAR_LENGTH(FirstName) from Person
4. CONCAT(str1, str2, …., strn)
Возвращает строку, образованную путем соединения строки str1 с strn. Аргументы NULL игнорируются.
SELECT FirstName, LastName, CONCAT(FirstName, LastName) as DisplayName from Person
5. str1 || стр2 ||…|| не-стр ||…|| strn
Объединяет строки str1, str2 в строку strn и даже в нестроковые аргументы.
ВЫБРАТЬ Идентификатор || Имя || Фамилия || телефон || адрес как Concat_All от человека
6. INITCAP(str)
Делает строку заглавной, т.е. первая буква каждого слова заглавная, а остальные строчные. Небуквенно-цифровые разделители определяют слова.
Выберите INITCAP('Это пример PostgreSQL')
7. LOWER() и UPPER()
Преобразует строку в нижний и верхний регистр.
SELECT FirstName, LOWER(FirstName) как нижний, UPPER(FirstName) как верхний из Person
8.
LEFT(str, len) / RIGHT(str, len)Возвращает крайний левый и крайний правый len символов из строки str. Когда len имеет отрицательное значение, возвращается строка str, кроме самого левого или самого правого символа len.
SELECT FirstName, LastName, CONCAT(LEFT(LastName, 3), RIGHT(FirstName, 2)) as LoginID from Person
длина строки str в символах. Однако это отличается от работы функции длины в SQL. Когда указано, encoding предоставляет длину в конкретной кодировке.
SELECT FirstName, LENGTH(FirstName), CHAR_LENGTH(FirstName) from Person
10. OCTET_LENGTH(str)
Вычисляет длину строки str в байтах.
SELECT FirstName, LENGTH(FirstName), CHAR_LENGTH(FirstName), OCTET_LENGTH(FirstName) from Person
Это очень похоже на функции LENGTH и CHAR_LENGTH. Разница возникает, когда задействованы многобайтовые символы.
SELECT '€' as multibyte_char, LENGTH('€'), CHAR_LENGTH('€'), OCTET_LENGTH('€')
Это происходит потому, что знак евро (€) занимает 3 байта в памяти.
11. LPAD(str, len, padstr) / RPAD(str, len, padstr)
Вставляет подстроку с позиции 0 строки padstr в начало и конец строки str до тех пор, пока результирующая строка не будет иметь длину персонажи.
ВЫБЕРИТЕ Имя, Фамилия, LPAD(CONCAT_WS(' ', Имя, Фамилия), CHAR_LENGTH(CONCAT_WS(' ', Имя, Фамилия))+CHAR_LENGTH('Г-н'), 'Г-н') as DisplayName от Person
12. LTRIM(строка, символы) / RTRIM(строка, символы) / TRIM(строка, символы)
Возвращает строку str после обрезки всех вхождений символов слева, справа или с обоих концов. Если в аргументах не указаны символы, пробелы обрезаются.
SELECT LTRIM(' abc ') как L1, RTRIM(' abc ') как R1, TRIM(' abc ') как T1, LTRIM('xxxyyabcxyz', 'xyz') как L2, RTRIM('xxx'yabcxyz 'xyz') как R2, TRIM('xxxyyabcxyz', 'xyz') как T2
13. POSITION(substr in str) / STRPOS(str, substr)
Находит позицию подстроки substr в строке str. Помните, индекс начинается с 1 в PostgreSQL. Возвращает 0, если совпадений не найдено.
SELECT Address, POSITION('Avenue' in Address) от человека
Большинство специальных символов удваиваются.
ВЫБРАТЬ Адрес, QUOTE_IDENT(Адрес), QUOTE_LITERAL(Адрес) от лица
15. REPLACE(str, from_str, to_str)
Заменяет все вхождения подстроки from_str на подстроку to_str в строке str. Он чувствителен к регистру.
SELECT Address, REPLACE(Address, 's', 'SS') from Person
16. REVERSE(str)
Переворачивает строку str.
SELECT FirstName, REVERSE(FirstName) from Person
17. REGEXP_MATCHES(str, pattern)
Возвращает все подстроки, соответствующие шаблону регулярного выражения POSIX.
SELECT Address, REGEXP_MATCHES(Address, '.[sN]i.') from Perso
18. REGEXP_REPLACE(str, pattern, newstr)
Заменяет все подстроки, соответствующие шаблону регулярного выражения POSIX .
ВЫБЕРИТЕ Адрес, REGEXP_MATCHES(Адрес, '..[e][n]..'), REGEXP_REPLACE(Адрес, '..[e][n]..', 'Улица') от Человека
19. REGEXP_SPLIT_TO_ARRAY(строка, шаблон)
Разбивает строку str на массив подстрок, разделенных шаблоном POSIX Regex. Образец E’\\s+’ означает один или несколько пробелов.
SELECT Address, REGEXP_SPLIT_TO_ARRAY(Address, E'\\s+') from Person
20. REGEXP_SPLIT_TO_TABLE(str, pattern)
Разбивает строку strex на таблицу подстрок, разделенную шаблоном POSIX.
ВЫБЕРИТЕ Адрес, REGEXP_SPLIT_TO_TABLE(Адрес, E'\\s+') от лица
21. SUBSTRING(str from pos for len)
Возвращает подстроку из строки str, начиная с позиции pos длины len.
SELECT FirstName, SUBSTRING(FirstName from 2 for 4) as substring from Person
22. SUBSTRING(str from posix_pattern) / SUBSTRING(str from sql_pattern for escape)
Возвращает str из строки, что подстрока соответствует регулярному выражению POSIX или регулярному выражению SQL. Регулярные выражения — это большая, замечательная и полезная тема для компьютеров. Рекомендуется овладеть шаблонами регулярных выражений, прежде чем применять их бессистемно.
SELECT FirstName, SUBSTRING(FirstName from '...$') as sub1, substring(FirstName from '%#"o_a#"_%' for '#') as sub2 from Person
Заключение
Итак, в заключение, эти, наряду с другими встроенными функциями, делают PostgreSQL таким мощным. Включение шаблонов регулярных выражений добавляет ему больше возможностей. Как только искусство написания шаблонов регулярных выражений будет изучено и освоено, играть с базой данных станет намного веселее.
Рекомендуемые статьи
Это руководство по строковым функциям PostgreSQL. Здесь мы обсудили, как использовать строковые функции с помощью примеров. Вы также можете просмотреть другие наши статьи, чтобы узнать больше:
- Строковые функции в Java с примерами
- Как установить PostgreSQL?
- Вопросы на собеседовании по PostgreSQL
- Функции регулярных выражений в Python (пример)
- Изучите различные версии PostgreSQL
- Другая архитектура PostgreSQL
- Возможности PostgreSQL
Функция MySQL SUBSTRING()
❮ Предыдущая ❮ Функции MySQL Далее ❯
Пример
Извлечь подстроку из строки (начать с позиции 5, извлечь 3 символов):
SELECT SUBSTRING(«Учебник по SQL», 5, 3) AS ExtractString;
Попробуйте сами »
Определение и использование
Функция SUBSTRING() извлекает подстроку из строки (начиная с любого должность).
Примечание: Функции SUBSTR() и MID() равно SUBSTRING() функция.
Синтаксис
ПОДСТРОКА( строка , начало , длина
)ИЛИ:
ПОДСТРОКА( строка ОТ начало ДЛЯ длина )
Значения параметров
Параметр | Описание |
---|---|
строка | Обязательно. Строка для извлечения из |
начало | Обязательно. Начальное положение. Может быть как положительным, так и отрицательным числом. Если это положительное число, эта функция извлекает с начала нить. Если это отрицательное число, эта функция извлекает из конец строки |
длина | Дополнительно. Количество символов для извлечения. Если опустить, весь будет возвращена строка (от start позиция) |
Технические детали
Работает в: | Из MySQL 4. 0 |
---|
Другие примеры
Пример
Извлечь подстроку из текста в столбце (начать с позиции 2, извлечь 5 символов):
SELECT SUBSTRING(CustomerName,
2, 5) AS ExtractString
ОТ Заказчиков;
Попробуйте сами »
Пример
Извлечь подстроку из строки (начать с конца, в позиции -5, извлечь 5 символов):
SELECT SUBSTRING(«Учебник по SQL», -5, 5) AS ExtractString;
Попробуйте сами »
❮ Предыдущая ❮ Функции MySQL Следующий ❯
ВЫБОР ЦВЕТА
Лучшие учебники
Учебник по HTMLУчебник по CSS
Учебник по JavaScript
Учебник How To
Учебник по SQL
Учебник по Python
Учебник по W3.CSS
Учебник по Bootstrap
Учебник по PHP
Учебник по Java
Учебник по C++
Учебник по jQuery
Лучшие ссылки
Справочник по HTMLСправочник по CSS
Справочник по JavaScript
Справочник по SQL
Справочник по Python
Справочник по W3.