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

3 způsoby, jak najít řádky, které obsahují malá písmena v SQLite

Zde jsou tři možnosti pro vrácení řádků, které obsahují malá písmena v SQLite.

Ukázková data

Předpokládejme, že máme tabulku s následujícími údaji:

.nullvalue null
SELECT c1 FROM t1;

Výsledek:

c1            
--------------
CAFÉ          
Café          
café          
1café         
eCafé         
James Bond 007
JB 007        
007           
null          
              
É             
É 123         
é             
é 123         
ø             
Ø             

K vrácení řádků, které obsahují malá písmena, můžeme použít následující metody.

Možnost 1:Porovnejte s UPPER() Řetězec

Můžeme použít UPPER() funkce pro porovnání původní hodnoty s jejím ekvivalentem velkým písmenem:

SELECT c1 FROM t1
WHERE UPPER(c1) <> c1;

Výsledek:

c1            
--------------
Café          
café          
1café         
eCafé         
James Bond 007

Pomocí nerovná se (<> ) operátor (můžete také použít != místo <> pokud chcete), vracíme pouze ty řádky, které se liší od jejich ekvivalentů velkými písmeny. Důvod, proč to děláme, je ten, že pokud je hodnota stejná jako její ekvivalent velkými písmeny, pak již byla na začátku velká (a my ji nechceme vracet).

SQLite provádí vyhledávání s rozlišením velkých a malých písmen, a proto pro dosažení požadovaného výsledku nemusíme dělat nic jiného.

Možná jste si všimli, že výše uvedený příklad nevrátil malá písmena unicode é a ø pokud hodnota nezahrnuje také malé písmeno, které není Unicode. SQLite plně nepodporuje znaky Unicode. Například UPPER() a LOWER() funkce poskytují mapování velkých a malých písmen pouze pro 26 písmen používaných v angličtině. Výše uvedený příklad tedy nepřevedl žádné znaky Unicode na jejich ekvivalent velkých písmen.

Pokud potřebujete pracovat se znaky unicode, podívejte se na rozšíření SQLite ICU.

Možnost 2:Porovnání se skutečnými postavami

Další možností je použít REGEXP operátor se vzorem regulárního výrazu, který explicitně zahrnuje každý malý znak, který chceme porovnat:

SELECT c1 FROM t1
WHERE c1 REGEXP '[abcdefghijklmnopqrstuvwxyz]';

Výsledek:

c1            
--------------
Café          
café          
1café         
eCafé         
James Bond 007

Pokud si přejeme, můžeme do našeho seznamu zahrnout znaky Unicode:

SELECT c1 FROM t1
WHERE c1 REGEXP '[éøabcdefghijklmnopqrstuvwxyz]';

Výsledek:

c1            
--------------
Café          
café          
1café         
eCafé         
James Bond 007
é             
é 123         
ø             

Možnost 3:Porovnání s řadou znaků

Dalším způsobem, jak to udělat, je zadat rozsah malých znaků, které chceme porovnat:

SELECT c1 FROM t1
WHERE c1 REGEXP '[a-z]';

Výsledek:

c1            
--------------
Café          
café          
1café         
eCafé         
James Bond 007

  1. MySQL vs MariaDB vs Percona Server:Porovnání bezpečnostních funkcí

  2. Transponování výsledku sql tak, aby jeden sloupec přešel do více sloupců

  3. Jak přidat vlastní atributy do připojovacího řetězce SQL?

  4. Jak získat čas vytvoření databáze v PostgreSQL 9.0?