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