В SQLite можете да използвате LIKE
оператор във вашите заявки, за да направите сравнение на съвпадение на шаблон.
Например, можете да го добавите към вашия WHERE
клауза, за да се върнат само редове, които съответстват на даден модел.
Въпреки това, добавянето му към WHERE
клаузата не е единственият начин, по който можете да използвате LIKE
оператор. Можете също да го използвате, за да върнете булева стойност.
Основен пример
Ето един основен пример, който използва LIKE
оператор в WHERE
клауза.
SELECT * FROM Artist
WHERE Name LIKE 'Black%';
Резултат:
ArtistId Name ---------- ------------------- 11 Black Label Society 12 Black Sabbath 169 Black Eyed Peas
В този случай исках да върна всички изпълнители, чиито имена започват с Black .
Знакът за процент е заместващ знак, който съответства на нула или повече от всеки знак (включително интервали).
Без заместващия знак
Ако не бях използвал заместващия знак, нямаше да постигна никакви резултати.
Ето пример за това, което имам предвид:
SELECT * FROM Artist
WHERE Name LIKE 'Black';
Резултат:
(Това е умишлено празно, защото нямаше резултати.)
Множество заместващи символи
Можете да използвате повече от един заместващ знак, ако е необходимо. В този пример добавям още един към предната част на моя шаблон.
SELECT * FROM Artist
WHERE Name LIKE '%Black%';
Резултат:
ArtistId Name ---------- ------------------- 11 Black Label Society 12 Black Sabbath 38 Banda Black Rio 137 The Black Crowes 169 Black Eyed Peas
Това води до връщане на повече редове, защото има два реда, които имат черно на тяхно име, но просто не в началото.
Заместващият знак за долна черта (_)
Имате и опцията да използвате долната черта (_
) заместващ знак.
Този заместващ знак съответства точно на един знак (който и да е знак).
Помислете за следната таблица, наречена Котки :
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh 4 100%Fluff 5 100$Fluff
Да, някои от тези котки имат странни имена, но ще са полезни.
Ето пример за използване на заместващия знак за подчертаване в заявка към тази таблица.
SELECT * FROM Cats
WHERE CatName LIKE 'Br_sh';
Резултат:
CatId CatName ---------- ---------- 1 Brush 2 Brash
Забележете, че котката на име Broosh не е включено.
За да включите Broosh , ще трябва да използвам две долни черти:
SELECT * FROM Cats
WHERE CatName LIKE 'Br__sh';
Резултат:
CatId CatName ---------- ---------- 3 Broosh
Това обаче изключва другите две котки.
Винаги мога да използвам знак за процент, за да включа другите котки.
SELECT * FROM Cats
WHERE CatName LIKE 'Br%sh';
Резултат:
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh
Въпреки това, имайте предвид, че това също ще върне имена с повече от два знака между Br и ш .
Клаузата ESCAPE
Понякога вашите данни може да включват заместващи знаци. С други думи, данните съдържат долни черти или знаци за проценти.
Това може да е проблем, ако всъщност се опитвате да съпоставите долната черта или знака за процент като буквален знак, а не като заместващ знак.
В моята таблица с котки ще забележите, че една котка има знак за процент в името си. Друга котка има почти същото име, с изключение на това, че вместо знак за процент, това е знак за долар.
Ето отново таблицата:
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh 4 100%Fluff 5 100$Fluff
Ако исках да върна само онези котки, чиито имена започват с 100%F тогава ще трябва да избягам от % . Ако не избягах от това, щях да получа нежелани резултати.
Ето какво се случва, ако изпълня заявка без избягване на знака за процент.
SELECT * FROM Cats
WHERE CatName LIKE '100%F';
Резултат:
CatId CatName ---------- ---------- 4 100%Fluff 5 100$Fluff
В този случай знакът за процент също съвпада със знака за долар, тъй като знакът за процент се третира като заместващ знак.
За да гарантираме, че процентният знак не се третира като заместващ знак, можем да използваме ESCAPE
клауза.
SELECT * FROM Cats
WHERE CatName LIKE '100\%%F' ESCAPE '\';
Резултат:
CatId CatName ---------- ---------- 4 100%Fluff
Връщане на булева стойност
Можете да използвате LIKE
оператор, за да върне 0 или 1 , в зависимост от това дали има съвпадение или не.
Ето един пример.
SELECT
CatName,
CatName LIKE 'Br%'
FROM Cats;
Резултат:
CatName CatName LIKE 'Br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
В този случай първите три реда отговарят на критериите, а последните два реда не.
Чувствителност на главни и малки букви
По подразбиране SQLite LIKE
Операторът е без значение за ASCII символи. Това означава, че ще съвпада с главни и малки букви, независимо кой регистър използвате във вашия шаблон.
Можете да използвате case_sensitive_like Инструкция PRAGMA за извършване на съвпадения, чувствителни към малки и големи букви в диапазона ASCII.
Вижте как да направите оператора LIKE на SQLite чувствителен към малки букви за примери.
Функция Like()
Алтернативен начин да го направите е да използвате like()
функция.
Тази функция прави точно същото нещо като LIKE
оператор, с изключение на това, че трябва да използвате малко по-различен синтаксис.
Всички горни примери могат да бъдат пренаписани, за да се използва like()
функция, ако е необходимо.