Like sqlite: SQLite LIKE — Querying Data Based On Pattern Matching

Содержание

LIKE условие SQLite — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

В этом учебном пособии вы узнаете, как использовать SQLite условие LIKE с синтаксисом и примерами.

Описание

SQLite условие LIKE позволяет использовать подстановочные символы (метасимволы) в операторе WHERE запроса SELECT, INSERT, UPDATE или DELETE. Это позволяет выполнять сопоставление с pattern.

Синтаксис

Синтаксис условия LIKE в SQLite:

expression LIKE pattern

Параметры или аргументы

expression
Символьное выражение, такое как столбец или поле.

pattern
Символьное выражение, которое содержит сопоставляемый шаблон. Шаблоны, которые вы можете выбрать:

Подстановочный символ Пояснение
% Соответствует любой строке любой длины (в том числе нулевой длины)
_ Соответствует одному символу

Пример — использование подстановочного символа % (символ знак процента)

Первый пример SQLite LIKE, который мы рассмотрим, включает использование подстановочного символа %.

Давайте разберем, как работает подстановочный символ % в SQLite условии LIKE. Мы хотим найти всех employees, last_name которых начинается с буквы ‘А’.

SELECT * FROM employees WHERE last_name LIKE ‘A%’;

SELECT *

  FROM employees

WHERE last_name LIKE ‘A%’;

Вы также можете использовать подстановочный символ % несколько раз в одной строке.
Например:

SELECT * FROM employees WHERE last_name LIKE ‘%e%’;

SELECT *

  FROM employees

WHERE last_name LIKE ‘%e%’;

В этом примере SQLite условия LIKE мы ищем всех employees, last_name которых содержит букву ‘e’.

Пример — использование подстановочного символа _ (символ подчеркивания)

Далее давайте разберем, как работает подстановочный символ _ в SQLite условии LIKE. Помните, что _ ищет только один символ.

Например:

SELECT last_name, first_name FROM employees WHERE last_name LIKE ‘H_nt’;

SELECT last_name,

       first_name

  FROM employees

WHERE last_name LIKE ‘H_nt’;

В этом примере SQLite условия LIKE будут возвращаться все employees, чья last_name имеет длину 4 символа, где первый символ — ‘Н’, а последние два символа — ‘nt’. Например, он может возвращать значения last_name, такие как: ‘Hant’, ‘Hent’, ‘Hint’, ‘Hont’, ‘Hunt’ и т.д.

Пример — использование оператора NOT

Рассмотрим, как использовать оператор NOT с подстановочными символами.

В этом примере мы будем использовать подстановочный символ % с оператором NOT. Вы также можете использовать SQLite условие LIKE, чтобы найти employees (сотрудников), department (отдел) которых не начинается на ‘Acc’.

Например:

SELECT employee_id, last_name FROM employees WHERE department NOT LIKE ‘Acc%’;

SELECT employee_id,

       last_name

  FROM employees

WHERE department NOT LIKE ‘Acc%’;

Поместив оператор NOT перед SQLite условием LIKE, вы сможете получить всех сотрудников, отдел которых не начинается с ‘Acc’.

Регистронезависимый LIKE в SQLite для кириллицы | by Pavel Perestoronin

При использовании LIKE или ORDER BY в SQLite с Unicode-символами может возникнуть проблема, связанная с неспособностью SQLite по умолчанию правильно воспринимать разные регистры одной и той же буквы:

sqlite> select "ы" like "ы";
1
sqlite> select "Ы" like "ы";
0

Поиск приводит к расширению ICU, которое переопределяет функции изменения регистра так, чтобы символы за пределами таблицы ASCII правильно приводились к заданному регистру.

Есть два варианта использования расширения:

  1. Скомпилировать SQLite вместе с расширением (и использовать вместо системной библиотеки).
  2. Скомпилировать расширение как Runtime Loadable Extension.

Мне хотелось использовать расширение через стандартный модуль sqlite3 в Python, поэтому было решено пойти по второму пути.

Для начала установим необходимые пакеты с исходным кодом:

$ sudo apt-get install libicu-dev libsqlite3-dev

Скачаем исходный код самого расширения:

$ wget "https://www.sqlite.org/src/raw/ext/icu/icu.c?name=b2732aef0b076e4276d9b39b5a33cec7a05e1413" -O icu.c

А дальше — немного странный момент. Если мы сейчас скомпилируем расширение, то вероятно, получим следующую ошибку при попытке загрузить его (имя в вашей версии SQLite может быть другим):

sqlite> .load ./libsqliteicu.so
Error: ./libsqliteicu.so: undefined symbol: sqlite3_sqliteicu_init

Чтобы исправить ошибку, редактируем файл icu.c, заменяя в нем имя функции sqlite3_icu_init на sqlite3_sqliteicu_init.

Теперь собираем расширение:

$ gcc -shared icu.c -g -o libsqliteicu.so -fPIC `icu-config --cppflags --ldflags`

Загружаем расширение и проверяем, что все в порядке:

sqlite> .load ./libsqliteicu.so
sqlite> select "Ы" like "ы";
1

Для того, чтобы загрузить это расширение из Python, сначала разрешаем загрузку расширений из библиотек и затем загружаем саму библиотеку:

import sqlite3
connection = sqlite3.connect(":memory:")
connection.enable_load_extension(True)
connection.load_extension("./libsqliteicu.so")
assert connection.execute("select 'ы' like 'Ы'").fetchone() == (1, )

java — Использование оператора Like в SQLITE на андроид студии

У меня есть база данных SQLite, содержащая информацию об автомобилях. Я хочу выбирать автомобили, которые являются маркой BMW. У меня есть это утверждение:

String selectQuery = "SELECT  * FROM " +Note. TABLE_NAME+ " where " + "BRAND" + " like "+ "BMW";

Приложение вылетает и в журналах показывается:

no such column: BMW (code 1): , while compiling: SELECT  * FROM adds where BRAND like BMW

Когда я использую это приложение работает:

 String selectQuery = "SELECT  * FROM " +Note.TABLE_NAME+ " where " + "AGE" + " like "+ "10";

Как я могу использовать Like со строкой после этого?

-1

Upe 16 Сен 2019 в 20:11

2 ответа

Лучший ответ

Вам необходимо заключить значение, которое вы получаете, в одинарные кавычки.

Попробуйте вместо этого:

String selectQuery = "SELECT * FROM " +Note.TABLE_NAME+ " where " + "BRAND" + " like 'BMW'";

Кроме того, вам не нужно помещать каждое слово запроса в свои кавычки. Вы можете просто использовать:

String selectQuery = "SELECT * FROM " +Note.TABLE_NAME+ " where BRAND like 'BMW'";

1

Chad 16 Сен 2019 в 17:29

Для утверждения:

SELECT  * FROM tablename where BRAND like BMW

SQLite рассматривает BMW как имя столбца (которое, конечно, не существует), поэтому код завершается ошибкой.
Это должно быть:

SELECT  * FROM tablename where BRAND like 'BMW'

Но для утверждения:

SELECT  * FROM tablename where AGE like 10

SQLite не считает 10 именем столбца, потому что это буквальное значение, которое неявно преобразуется в

TEXT: '10', и код работает без проблем.

0

forpas 16 Сен 2019 в 17:24

57961509

SQLite оператор LIKE — w3resource

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Theme: Overlay by Kaira Extra Text
Cape Town, South Africa