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