SQLite
 sql >> Baza danych >  >> RDS >> SQLite

3 sposoby na znalezienie wierszy zawierających wielkie litery w SQLite

Oto trzy opcje zwracania wierszy zawierających duż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 duże litery.

Opcja 1:Porównaj z LOWER() Ciąg

Możemy użyć LOWER() funkcja do porównania oryginalnej wartości z jej odpowiednikiem małymi literami:

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

Wynik:

c1            
--------------
CAFÉ          
Café          
eCafé         
James Bond 007
JB 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 małymi literami. Powodem, dla którego to robimy, jest to, że jeśli wartość jest taka sama jak jej odpowiednik małymi literami, to na początku była już mała (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ł wielkich znaków Unicode É i Ø chyba że wartość zawiera również wielką literę inną niż Unicode. SQLite nie obsługuje w pełni znaków Unicode. Na przykład LOWER() i UPPER() 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 małymi 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żdy znak wielkiej litery, który chcemy dopasować:

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

Wynik:

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

Opcja 3:Porównaj z zakresem znaków

Innym sposobem na to jest określenie zakresu wielkich liter, które chcemy dopasować:

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

Wynik:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Data i godzina SQLite

  2. Jak używać klasy databasehelper w klasie asynctask pracującej na innej klasie?

  3. SQLite - Nie można otworzyć pliku bazy danych

  4. Wstaw wiele wierszy w błędzie SQLite (kod błędu =1)

  5. Suma nad wartościami według miesiąca w milisekundach