РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
430 of 711 menu

Функция collate

Функция collate применяет правило сортировки (collation) к выражению столбца. Первым параметром функция принимает выражение столбца, вторым - имя правила сортировки. Правило сортировки определяет, как база данных сравнивает и упорядочивает строковые значения.

Функция возвращает новое выражение столбца с примененным правилом сортировки. Это выражение можно использовать в конструкциях select, order_by и where.

Синтаксис

collate(column, collation)

Пример

Давайте создадим таблицу статей и применим правило сортировки NOCASE к столбцу title:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, collate engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String), ) metadata.create_all(engine) with engine.connect() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article', 'text': 'text 1'}, {'id': 2, 'title': 'Article', 'text': 'text 2'}, {'id': 3, 'title': 'ARTICLE', 'text': 'text 3'}, ]) stmt = select(articles.c.title).order_by(collate(articles.c.title, 'NOCASE')) res = conn.execute(stmt).fetchall() print(res)

Результат выполнения кода:

[('article',), ('Article',), ('ARTICLE',)]

Пример

Давайте посмотрим, какой SQL-запрос формируется при использовании функции collate:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, collate engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String), ) stmt = select(articles.c.title).order_by(collate(articles.c.title, 'NOCASE')) print(stmt)

Итоговый SQL запрос:

SELECT articles.title FROM articles ORDER BY articles.title COLLATE "NOCASE"

Пример

Давайте применим правило сортировки в условии where для регистронезависимого поиска:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, collate engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String), ) metadata.create_all(engine) with engine.connect() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article', 'text': 'text 1'}, {'id': 2, 'title': 'Article', 'text': 'text 2'}, {'id': 3, 'title': 'ARTICLE', 'text': 'text 3'}, ]) stmt = select(articles.c.id, articles.c.title).where( collate(articles.c.title, 'NOCASE') == 'article' ) res = conn.execute(stmt).fetchall() print(res)

Результат выполнения кода:

[(1, 'article'), (2, 'Article'), (3, 'ARTICLE')]

Смотрите также

  • функцию asc,
    которая сортирует по возрастанию
  • функцию desc,
    которая сортирует по убыванию
  • функцию lower,
    которая приводит строку к нижнему регистру
  • функцию cast,
    которая приводит выражение к заданному типу
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить