oracle like без учета регистра

Оператор LIKE cоветы и хитрости программирования

Содержание

Польза предложения LIKE основывается на поддерживаемых им обобщающих операторах. Предложение LIKE возвращает булево значение ИСТИНА, если при сравнении обнаруживаются совпадающие значения.

Для функционирования предложения LIKE очень важна чувствительность к регистру конкретной СУБД. Например, Microsoft SQL Server по умолчанию не учитывает регистр (хотя его можно настроить соответствующим образом). Таким образом, SQL Server будет считать строки DAD и dad одинаковыми. С другой стороны, платформа Oracle учитывает регистр, и строки DAD и dad здесь будут разными. Вот пример, позволяющий лучше проиллюстрировать это положение.

Этот запрос для Microsoft SQL Server извлечет из таблицы authors записи, где фамилия (lname) имеет вид ‘larson’ или ‘lars’, хотя в запросе поиск определен с использованием верхнего регистра (‘LARS%’). В Oracle этот запрос не найдет фамилий ‘Larson’ или ‘Lars’, поскольку Oracle производит сравнение с учетом регистра.

Платформа DB2 поддерживает синтаксис предложения LIKE стандарта ANSI SQL 2003. Поддерживаются обобщающие символы % и знак подчеркивания (_). Поддерживаются отменяющие последовательности.

Платформа DB2 учитывает регистр, поэтому здесь реализация предложения LIKE полностью чувствительна к регистру. Чтобы значения в разных регистрах всегда сравнивались без учета регистра, нужно использовать функцию UPPER или TRANSLATE. Кроме того, DB2 неявно преобразует кодовую страницу шаблона строки или отменяющей последователъности к кодовой странице выражения, если только они не определены с предложением FOR BIT DATA.

MySQL

Платформа MySQL поддерживает для предложения LIKE синтаксис стандарта ANSI. Поддерживаются обобщающие символы % и знак подчеркивания (_). Также поддерживается предложение ESCAPE.

Кроме того, MySQL поддерживает специальные функции REGEXP и NOT RLIKE, применяемые при проверке регулярных выражений. MySQL после версии 3.23.4 по умолчанию не учитывает регистр.

Oracle

Платформа Oracle поддерживает для предложения LIKE синтаксис стандарта ANSI. Поддерживаются обобщающие символы % и знак подчеркивания (_). Также поддерживается предложение ESCAPE. Синтаксис предложения LIKE в Oracle следующий.

LIKE4> строковый_шаблон [ESCAPE отменяющая_последовательность]

Специфичные для Oracle синтаксические элементы имеют следующие значения.

LIKEC

Используется полный набор символов UNICODE.

LIKE2

Используется набор символов UNICODE USC2.

LIKE4

Используется набор символов UNICODE USC4.

Поскольку платформа Oracle учитывает регистр, следует включать выражение, строковый_шаблон или и то и другое в функцию UPPER. В этом случае вы всегда будете сравнивать то, что нужно.

PostgreSQL

Платформа PostgreSQL поддерживает ANSI синтаксис предложения LIKE. Поддерживаются обобщающие символы % и знак подчеркивания (_). Также поддерживаются отменяющие последовательности.

Например, следующие запросы функционально эквивалентны.

Преобразуем значения в верхний регистр

Производим сравнение без учета регистра SELECT * FROM authors WHERE city

Вы должны знать (хотя это и выходит за рамки данной книги), что PostgreSQL также поддерживает регулярные выражения POSIX. Подробности приводятся в описании платформы.

SQL Server

Платформа SQL Server поддерживает ANSI синтаксис предложения LIKE. Поддерживаются отменяющие последовательности. Поддерживаются также следующие дополнительные обобщающие операторы.

Используя дополнительные обобщающие операторы SQL Server, вы получаете дополнительные возможности. Например, вы можете извлечь записи об авторах, фамилии которых Carson, Carsen, Karson или Karsen.

Или вы можете извлечь записи об авторах, фамилии которых заканчиваются на «arson» или «arsen», но не Larsen или Larson.

Дополнительная информация по теме

Некоторые хитрости при использования инструкции REVOKE в базах данных на различных платформах

Некоторые советы использования инструкции MERGE в базах данных на различных платформах

Советы по использованию инструкции UPDATE в базах данных на самых разнообразных платформах

Некоторые особенности использования инструкции INSERT в базах данных на различных платформах

Источник

Поиск без учета регистра в Oracle

Поведение по умолчанию для LIKE и других операторов сравнения, = и т. Д. Учитывает регистр.

Можно ли сделать их нечувствительными к регистру?

6 ответов

Начиная с 10gR2, Oracle позволяет точно настраивать поведение сравнения строк, задавая NLS_COMP и NLS_SORT параметры сеанса:

Вы также можете создавать индексы без учета регистра:

Есть 3 основных способа выполнить поиск без учета регистра в Oracle без использования полнотекстовых индексов.

В конечном счете, какой метод вы выберете, зависит от ваших индивидуальных обстоятельств; главное помнить, что для повышения производительности вы должны правильно индексировать поиск без учета регистра.

1. Сохраняйте столбец и строку одинаково.

Вы можете заставить все ваши данные быть одинаковыми, используя UPPER() или LOWER() :

Если вы используете LIKE, вам нужно объединить % вокруг искомой строки.

Этот скрипт SQL демонстрирует, что происходит во всех этих запросах. Обратите внимание на планы объяснения, которые указывают, когда индекс используется, а когда нет.

2. Используйте регулярные выражения.

Чтобы использовать это как оператор равенства, вы должны указать начало и конец строки, которые обозначаются каратом и знаком доллара.

Чтобы выполнить аналог LIKE, их можно удалить.

Будьте осторожны с этим, поскольку ваша строка может содержать символы, которые будут по-разному интерпретироваться обработчиком регулярных выражений.

Этот скрипт SQL показывает тот же пример вывода, за исключением использования REGEXP_LIKE ().

3. Измените его на уровне сеанса.

Параметр NLS_SORT управляет последовательностью сопоставления для упорядочивания. и различные операторы сравнения, включая = и LIKE. Вы можете указать двоичную сортировку без учета регистра, изменив сеанс. Это будет означать, что каждый запрос, выполняемый в этом сеансе, будет выполнять параметры без учета регистра.

Существует много дополнительной информации о лингвистической сортировке и поиске строк если вы хотите указать другой язык, или выполнить поиск без учета акцента, используя BINARY_AI.

Вам также потребуется изменить параметр NLS_COMP. ; Цитировать:

Точные операторы и предложения запроса, которые подчиняются параметру NLS_SORT, зависят от значения параметра NLS_COMP. Если оператор или предложение не подчиняется значению NLS_SORT, как определено NLS_COMP, используется сопоставление BINARY.

При сравнении всех операций SQL в предложении WHERE и в блоках PL / SQL следует использовать лингвистическую сортировку, указанную в параметре NLS_SORT. Чтобы повысить производительность, вы также можете определить лингвистический индекс для столбца, для которого вы хотите лингвистические сравнения.

Итак, еще раз вам нужно изменить сеанс

Как указано в документации, вы можете создать лингвистический индекс для повышения производительности

Источник

Поиск без учета регистра в Oracle

Поведение по умолчанию LIKE и других операторов сравнения и = т. Д. Чувствительно к регистру.

Можно ли сделать их без учета регистра?

Начиная с 10gR2, Oracle позволяет тонко настраивать поведение сравнения строк, устанавливая параметры NLS_COMP и NLS_SORT сессию:

Вы также можете создавать регистры без учета регистра:

В версиях старше 10gR2 это не может быть сделано, и обычный подход, если вам не нужен нечувствительный к акценту поиск, заключается просто UPPER() в столбце и поисковом выражении.

Существует 3 основных способа выполнения поиска без учета регистра в Oracle без использования полнотекстовых индексов.

В конечном итоге, какой метод вы выберете, зависит от ваших индивидуальных обстоятельств; Главное, что нужно помнить, это то, что для повышения производительности вы должны правильно индексировать для поиска без учета регистра.

1. Обсудите ваш столбец и строку одинаково.

Вы можете заставить все ваши данные быть в одном и том же случае с помощью UPPER() или LOWER() :

Если вы используете LIKE, вы должны объединить % вокруг искомой строки.

Эта скрипта SQL демонстрирует, что происходит во всех этих запросах. Обратите внимание на планы объяснения, которые указывают, когда индекс используется, а когда нет.

2. Используйте регулярные выражения.

Чтобы использовать это как оператор равенства, вы должны указать начало и конец строки, которая обозначается в каратах и ​​знаком доллара.

Чтобы выполнить эквивалент LIKE, их можно удалить.

Будьте осторожны с этим, поскольку ваша строка может содержать символы, которые будут по-разному интерпретироваться механизмом регулярных выражений.

Эта SQL Fiddle показывает тот же пример вывода, за исключением использования REGEXP_LIKE ().

3. Измените его на уровне сеанса.

Параметр NLS_SORT управляет последовательностью сортировки для упорядочения и различных операторов сравнения, в том числе = и LIKE. Вы можете указать двоичную сортировку без учета регистра, изменив сеанс. Это будет означать, что каждый запрос, выполненный в этом сеансе, будет выполнять параметры без учета регистра.

Существует много дополнительной информации о лингвистической сортировке и поиске строк, если вы хотите указать другой язык или выполнить нечувствительный к акценту поиск с помощью BINARY_AI.

Вам также необходимо изменить параметр NLS_COMP ; Цитировать:

Значением по умолчанию NLS_COMP является BINARY; но LINGUISTIC указывает, что Oracle должен обратить внимание на значение NLS_SORT:

Для сравнения всех операций SQL в предложении WHERE и в блоках PL / SQL следует использовать лингвистическую сортировку, указанную в параметре NLS_SORT. Чтобы повысить производительность, вы также можете определить лингвистический индекс для столбца, для которого вы хотите лингвистические сравнения.

Итак, еще раз, вам нужно изменить сеанс

Как отмечено в документации, вы можете создать лингвистический индекс для повышения производительности.

Источник

Регистронезависимый поиск в Oracle

по умолчанию LIKE и другие операторы сравнения: = etc чувствителен к регистру.

возможно ли сделать их нечувствительными к регистру?

6 ответов

начиная с 10gR2, Oracle позволяет точно настроить поведение сравнения строк, установив NLS_COMP и NLS_SORT параметры сессии:

вы также можете создавать индексы без учета регистра:

эта информация была взята из Oracle case нечувствительные поиски. В статье упоминается REGEXP_LIKE но это, кажется, работает со старым добрым = как хорошо.

в версиях старше 10gR2 это не может быть сделано, и обычный подход, если вам не нужен учитывает диакритические знаки поиск, это просто UPPER() и столбец, и выражение поиска.

существует 3 основных способа выполнения поиска без учета регистра в Oracle без использования полнотекстовых индексов.

в конечном счете, какой метод вы выбираете, зависит от ваших индивидуальных обстоятельств; главное помнить, что для повышения производительности вы должны правильно индексировать для поиска без учета регистра.

1. Case ваш столбец и ваша строка одинаково.

вы можете заставить все ваши данные быть одним и тем же случаем, используя UPPER() или LOWER() :

если вы используете как, то вы должны объединить % вокруг строки, которую вы ищете.

это SQL Скрипка показано, что происходит во всех этих запросах. Обратите внимание на планы Explain, которые указывают, когда используется индекс, а когда нет.

2. Использовать регулярные выражения.

чтобы использовать это в качестве оператора равенства, вы должны указать начало и конец строки, которая обозначается карат и доллар знак.

чтобы выполнить эквивалент LIKE, они могут быть удалены.

будьте осторожны с этим, так как ваша строка может содержать символы, которые будут интерпретироваться по-разному с помощью регулярных выражений.

эта скрипка SQL показывает тот же пример вывода, кроме использования REGEXP_LIKE().

3. Измените его на уровне сеанса.

на NLS_SORT параметр регулирует последовательность сортировки для заказа и различные операторы сравнения, в том числе = и как. Вы можете указать двоичную сортировку без учета регистра, изменив сеанс. Это означает, что каждый запрос, выполняемый в этом сеансе, будет выполнять параметры без учета регистра.

есть много дополнительной информации вокруг лингвистическая сортировка и поиск строки если вы хотите указать другой язык или выполнить поиск без акцента, используя BINARY_AI.

Вам также нужно будет изменить NLS_COMP ; цитата:

точные операторы и предложения запроса, которые подчиняются параметру NLS_SORT зависит от значения параметра NLS_COMP. Если оператор или предложение не подчиняется значению NLS_SORT, как определено NLS_COMP, используемые параметры сортировки являются двоичными.

значение по умолчанию NLS_COMP является двоичным; но, LINGUISTIC указывает, что Oracle должен обратите внимание на значение NLS_SORT:

сравнения для всех операций SQL в предложении WHERE и в PL / SQL блоки должны использовать лингвистическую сортировку, указанную в NLS_SORT параметр. Для повышения производительности можно также определить лингвистический индекс столбца, для которого требуется лингвистический индекс сравнения.

Итак, еще раз, вам нужно изменить сеанс

как отмечено в документации, вы можете создать лингвистические индекс для повышения производительности

Источник

Поиск без учета регистра в Oracle

Поведение по умолчанию LIKE и других операторов сравнения = т.д. Учитывает регистр.

Возможно ли сделать их нечувствительными к регистру?

6 ответов

Поскольку 10gR2, Oracle позволяет точно настроить поведение сравнения строк, установив NLS_COMP и NLS_SORT параметры сеанса:

Вы также можете создавать индексы без регистров:

Существует 3 основных способа выполнить поиск без учета регистра в Oracle без использования полнотекстовых индексов.

В конечном счете, какой метод вы выбираете, зависит от ваших индивидуальных обстоятельств; главное, чтобы помнить, что для повышения производительности вы должны правильно индексировать регистр без учета регистра.

1. Введите столбец и строку точно.

Вы можете заставить все свои данные быть в одном и том же случае, используя UPPER() или LOWER() :

Если вы используете LIKE, вам необходимо объединить % вокруг строки, которую вы ищете.

Этот скрипт SQL показывает, что происходит во всех этих запросах. Обратите внимание на Объяснительные планы, которые указывают, когда используется индекс, и когда это не так.

2. Используйте регулярные выражения.

Чтобы использовать это как оператор равенства, вы должны указать начало и конец строки, которая обозначается значком карата и знака доллара.

Чтобы выполнить эквивалент LIKE, они могут быть удалены.

Будьте осторожны с этим, так как ваша строка может содержать символы, которые будут интерпретироваться по-разному с помощью механизма регулярных выражений.

Этот скрипт SQL показывает вам тот же примерный вывод, за исключением использования REGEXP_LIKE().

3. Измените его на уровне сеанса.

Параметр NLS_SORT управляет последовательностью сортировки для упорядочения и различными операторами сравнения, включая = и LIKE. Вы можете указать двоичный, нечувствительный к регистру, сортировку, изменив сеанс. Это будет означать, что каждый запрос, выполняемый в этом сеансе, будет выполнять нечувствительные к регистру параметры.

Имеется много дополнительной информации о лингвистической сортировке и поиске строк, если вы хотите указать другой язык или выполнить поиск без акцента, используя BINARY_AI.

Вам также потребуется изменить параметр NLS_COMP; цитата:

Значение по умолчанию NLS_COMP равно BINARY; но, LINGUISTIC указывает, что Oracle следует обратить внимание на значение NLS_SORT:

Сравнение всех операций SQL в предложении WHERE и в PL/SQL блоки должны использовать лингвистическую сортировку, указанную в NLS_SORT параметр. Чтобы повысить производительность, вы также можете определить лингвистический индекс в столбце, для которого вы хотите лингвистическую сравнения.

Итак, еще раз вам нужно изменить сеанс

Как указано в документации, вы можете создать лингвистический индекс для повышения производительности

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • ora 00907 отсутствует правая скобка 00907 00000 missing right parenthesis
  • optiplex 7090 в форм факторе micro