sql >> Databáze >  >> RDS >> SQLite

Jak nastavit, aby operátor SQLite LIKE rozlišoval malá a velká písmena

Ve výchozím nastavení SQLite LIKE operátor nerozlišuje velká a malá písmena u znaků ASCII. To znamená, že bude odpovídat velkým a malým písmenům, bez ohledu na to, jaká velká a malá písmena ve svém vzoru použijete.

Existuje však technika, kterou můžete použít k tomu, aby se rozlišovala malá a velká písmena.

SQLite má příkaz PRAGMA s názvem case_sensitive_like , který je navržen tak, aby konkrétně dával LIKE operátor rozlišuje velká a malá písmena u znaků ASCII.

Důvod, proč specifikuji „ASCII znaky“, je proto, že LIKE Operátor ve výchozím nastavení rozlišuje velká a malá písmena pro znaky Unicode, které jsou mimo rozsah ASCII.

Pokud tedy potřebujete LIKE operátor rozlišuje malá a velká písmena v rozsahu ASCII, case_sensitive_like Prohlášení PRAGMA může být to, co hledáte.

To platí také pro like() funkce, která funguje úplně stejně jako LIKE operátor.

Povolení/zakázání rozlišování malých a velkých písmen

K povolení rozlišování velkých a malých písmen můžete použít kteroukoli z následujících booleovských hodnot:

1
on
true
yes

Pro zakázání rozlišování velkých a malých písmen můžete použít kteroukoli z následujících booleovských hodnot:

0
off
false
no

Argument může být buď v závorce, nebo může být od názvu pragma oddělen rovnítkem.

Argumenty klíčových slov mohou být volitelně uvedeny v uvozovkách.

Příklad bez rozlišení malých a velkých písmen

Nejprve se podívejme, co se stane, když nepoužijeme case_sensitive_like prohlášení PRAGMA.

SELECT 
  'a' LIKE 'A',
  'æ' LIKE 'Æ';

Výsledek:

'a' LIKE 'A'  'æ' LIKE 'Æ'
------------  ------------
1             0           

V tomto případě první sloupec nerozlišuje malá a velká písmena – velká písmena A odpovídá malým písmenům a .

A zde je dotaz na databázovou tabulku.

SELECT 
  CatName,
  CatName LIKE 'br%'
FROM Cats;

Výsledek:

CatName     CatName LIKE 'br%'
----------  ------------------
Brush       1                 
Brash       1                 
Broosh      1                 
100%Fluff   0                 
100$Fluff   0                 

V tomto případě získáme shodu se všemi kočkami, jejichž jména začínají Br , i když naše kritéria používala malá písmena b .

Příklad rozlišování malých a velkých písmen

Nyní se podívejme, co se stane, když použijeme case_sensitive_like PRAGMA pro povolení rozlišování velkých a malých písmen v rozsahu ASCII.

PRAGMA case_sensitive_like = 1;
SELECT 
  'a' LIKE 'A',
  'æ' LIKE 'Æ';

Výsledek:

'a' LIKE 'A'  'æ' LIKE 'Æ'
------------  ------------
0             0           

Tentokrát tedy velké A není odpovídat malým písmenům a .

A zde je příklad databáze po povolení rozlišování velkých a malých písmen.

SELECT 
  CatName,
  CatName LIKE 'br%'
FROM Cats;

Výsledek:

CatName     CatName LIKE 'br%'
----------  ------------------
Brush       0                 
Brash       0                 
Broosh      0                 
100%Fluff   0                 
100$Fluff   0                 

Všimněte si, že jsem nemusel znovu spouštět příkaz PRAGMA. Nastavení zůstává na místě pro mé připojení, dokud jej nezměním.

Zakázat rozlišování malých a velkých písmen

Zde je příklad deaktivace rozlišování malých a velkých písmen a opětovného spuštění dotazu.

PRAGMA case_sensitive_like = 0;
SELECT 
  CatName,
  CatName LIKE 'br%'
FROM Cats;

Výsledek:

CatName     CatName LIKE 'br%'
----------  ------------------
Brush       1                 
Brash       1                 
Broosh      1                 
100%Fluff   0                 
100$Fluff   0                 

Funkce Like()

Jak již bylo zmíněno, case_sensitive_like Příkaz PRAGMA také ovlivňuje like() funkce.

PRAGMA case_sensitive_like = 1;
SELECT 
  CatName,
  like('Br%', CatName),
  like('br%', CatName)
FROM Cats;

Výsledek:

CatName     like('Br%', CatName)  like('br%', CatName)
----------  --------------------  --------------------
Brush       1                     0                   
Brash       1                     0                   
Broosh      1                     0                   
100%Fluff   0                     0                   
100$Fluff   0                     0                   

Operátor LIKE s podporou Unicode

Můžete také použít rozšíření SQLite ICU, pokud potřebujete LIKE s podporou unicode operátor.

Implementace LIKE zahrnuté v tomto rozšíření používá funkci ICU u_foldCase() poskytnout srovnání bez ohledu na malá a velká písmena pro celý rozsah znaků unicode.


  1. Hodnota dat v čase

  2. Volejte funkci vracející sadu s argumentem pole vícekrát

  3. Použití ADO asynchronně v aplikaci Microsoft Access k urychlení formulářů

  4. Postgresql nevytváří db s „createdb“ jako superuživatel, přesto nevypisuje chyby