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

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

Zde jsou tři možnosti pro vrácení řádků, které obsahují velká 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í velká písmena, můžeme použít následující metody.

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

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

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

Výsledek:

c1            
--------------
CAFÉ          
Café          
eCafé         
James Bond 007
JB 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 malých ekvivalentů. Důvodem, proč to děláme, je to, že pokud je hodnota stejná jako její ekvivalent malým písmenem, pak již byla na začátku malá (a nechceme ji 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 velká písmena unicode É a Ø pokud hodnota nezahrnuje také velké písmeno jiné než unicode. SQLite plně nepodporuje znaky Unicode. Například LOWER() a UPPER() 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 proto nepřevedl žádné znaky Unicode na jejich malá písmena.

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

Možnost 2:Porovnejte 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ý velký znak, který chceme porovnat:

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

Výsledek:

c1            
--------------
CAFÉ          
Café          
eCafé         
James Bond 007
JB 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é          
eCafé         
James Bond 007
JB 007        
É             
É 123         
Ø             

Možnost 3:Porovnejte s řadou znaků

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

SELECT c1 FROM t1
WHERE c1 REGEXP '[A-Z]';

Výsledek:

c1            
--------------
CAFÉ          
Café          
eCafé         
James Bond 007
JB 007        

  1. Jak nainstalovat oracle instantclient a pdo_oci na stroj ubuntu?

  2. Neo4j - Odstranění uzlu pomocí Cypher

  3. Jak vrátit prvky z pole JSON v MariaDB

  4. Těžební plány :Nejen pro mezipaměť plánů