Oto trzy opcje zwracania wierszy zawierających małe litery w SQLite.
Przykładowe dane
Załóżmy, że mamy tabelę z następującymi danymi:
.nullvalue null
SELECT c1 FROM t1;
Wynik:
c1 -------------- CAFÉ Café café 1café eCafé James Bond 007 JB 007 007 null É É 123 é é 123 ø Ø
Możemy użyć następujących metod, aby zwrócić wiersze zawierające małe litery.
Opcja 1:Porównaj z UPPER()
Ciąg
Możemy użyć UPPER()
funkcja do porównania oryginalnej wartości z jej odpowiednikiem pisanym wielkimi literami:
SELECT c1 FROM t1
WHERE UPPER(c1) <> c1;
Wynik:
c1 -------------- Café café 1café eCafé James Bond 007
Używając nie równego (<>
) operator (możesz alternatywnie użyć !=
zamiast <>
jeśli wolisz), zwracamy tylko te wiersze, które różnią się od ich odpowiedników pisanych wielkimi literami. Powodem, dla którego to robimy, jest to, że jeśli wartość jest taka sama jak jej odpowiednik pisany wielkimi literami, to na początku była już pisana wielkimi literami (i nie chcemy jej zwracać).
SQLite przeprowadza wyszukiwanie z uwzględnieniem wielkości liter, więc nie musimy robić nic więcej, aby uzyskać pożądany wynik.
Być może zauważyłeś, że powyższy przykład nie zwrócił małych znaków Unicode é
i ø
chyba że wartość zawiera również małą literę inną niż Unicode. SQLite nie obsługuje w pełni znaków Unicode. Na przykład UPPER()
i LOWER()
funkcje zapewniają mapowanie wielkości liter tylko dla 26 liter używanych w języku angielskim. Dlatego powyższy przykład nie konwertował żadnych znaków Unicode na ich odpowiedniki pisane wielkimi literami.
Przyjrzyj się rozszerzeniu SQLite ICU, jeśli musisz pracować ze znakami Unicode.
Opcja 2:Porównaj z rzeczywistymi znakami
Inną opcją jest użycie REGEXP
operator ze wzorcem wyrażenia regularnego, który jawnie zawiera każdą małą literę, którą chcemy dopasować:
SELECT c1 FROM t1
WHERE c1 REGEXP '[abcdefghijklmnopqrstuvwxyz]';
Wynik:
c1 -------------- Café café 1café eCafé James Bond 007
Jeśli chcemy, możemy dołączyć znaki Unicode do naszej listy:
SELECT c1 FROM t1
WHERE c1 REGEXP '[éøabcdefghijklmnopqrstuvwxyz]';
Wynik:
c1 -------------- Café café 1café eCafé James Bond 007 é é 123 ø
Opcja 3:Porównaj z zakresem znaków
Innym sposobem na to jest określenie zakresu małych liter, które chcemy dopasować:
SELECT c1 FROM t1
WHERE c1 REGEXP '[a-z]';
Wynik:
c1 -------------- Café café 1café eCafé James Bond 007