SQLite
 sql >> база данни >  >> RDS >> SQLite

Как работи операторът LIKE в SQLite

В 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() функция, ако е необходимо.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Извадете дни от дата в SQLite

  2. SQLiteDiskIOException с код за грешка 10:грешка в дисковия вход/изход

  3. Android SQLite LIKE escape заместващ знак

  4. WinDeath при notifyDataSetChanged()

  5. Оператори за извличане на JSON подкомпоненти