sql >> Database teknologi >  >> RDS >> SQLite

Sådan gør du SQLites LIKE-operatør case-sensitive

Som standard er SQLite LIKE operatoren skelner mellem store og små bogstaver for ASCII-tegn. Det betyder, at det vil matche store og små bogstaver, uanset hvilket bogstav du bruger i dit mønster.

Der er dog en teknik, du kan bruge til at gøre det skelet mellem store og små bogstaver.

SQLite har en PRAGMA-sætning kaldet casesensitive_like , som er designet til specifikt at lave LIKE operatør skelner mellem store og små bogstaver for ASCII-tegn.

Grunden til at jeg angiver "ASCII-tegn" er, at LIKE operatoren skelner som standard mellem store og små bogstaver for unicode-tegn, der er uden for ASCII-området.

Derfor, hvis du har brug for LIKE operatoren skal være case-sensitive i ASCII-området, case_sensitive_like PRAGMA-erklæring kunne være det, du leder efter.

Dette gælder også for like() funktion, som fungerer nøjagtigt det samme som LIKE operatør.

Aktivere/deaktivere store og små bogstaver

Du kan bruge en hvilken som helst af følgende booleske værdier for at aktivere forskel på store og små bogstaver:

1
on
true
yes

Du kan bruge en af ​​følgende booleske værdier til at deaktivere følsomhed mellem store og små bogstaver:

0
off
false
no

Argumentet kan enten stå i parentes, eller det kan være adskilt fra pragmanavnet med et lighedstegn.

Søgeordsargumenter kan valgfrit vises i anførselstegn.

Eksempel uden store og små bogstaver

Lad os først se, hvad der sker, når vi ikke bruger case_sensitive_like PRAGMA-udsagn.

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

Resultat:

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

I dette tilfælde er den første kolonne uafhængig af store og små bogstaver – det store A matcher små bogstaver a .

Og her er en forespørgsel mod en databasetabel.

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

Resultat:

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

I dette tilfælde får vi en kamp mod alle katte, hvis navne starter med Br , selvom vores kriterier brugte et lille b .

Eksempel på store og små bogstaver

Lad os nu se, hvad der sker, når vi bruger case-sensitive_like PRAGMA-sætning for at aktivere store og små bogstaver i ASCII-området.

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

Resultat:

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

Så denne gang med store bogstaver A gør ikke match små bogstaver a .

Og her er databaseeksemplet efter aktivering af store og små bogstaver.

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

Resultat:

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

Bemærk, at jeg ikke behøvede at køre PRAGMA-erklæringen igen. Indstillingen forbliver på plads for min forbindelse, indtil jeg ændrer den.

Deaktiver versalfølsomhed

Her er et eksempel på deaktivering af store og små bogstaver og kørsel af forespørgslen igen.

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

Resultat:

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

Like()-funktionen

Som nævnt er case_sensitive_like PRAGMA-sætningen påvirker også like() funktion.

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

Resultat:

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

Unicode-Aware LIKE-operatør

Du kan også bruge SQLite ICU-udvidelsen, hvis du har brug for en unicode-bevidst LIKE operatør.

Implementeringen af ​​LIKE inkluderet i denne udvidelse bruger ICU-funktionen u_foldCase() at give kasus-uafhængige sammenligninger for hele rækken af ​​unicode-tegn.


  1. Kompression og dens virkninger på ydeevne

  2. Hvordan zipper man en fil i PL/SQL?

  3. Introduktion af ny funktion:Always On Availability Group

  4. Reverse engineering (oracle) skema til ERD