MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

4 sposoby na znalezienie wierszy zawierających wielkie litery w MariaDB

Oto cztery opcje zwracania wierszy zawierających wielkie litery w MariaDB.

Przykładowe dane

Załóżmy, że mamy tabelę z następującymi danymi:

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 klasą znaków POSIX

Możemy użyć REGEXP operator, aby wykonać dopasowanie wzorca wyrażenia regularnego.

Prostą opcją jest porównanie naszej kolumny z [:upper:] Klasa znaków POSIX:

SELECT c1 FROM t1
WHERE c1 REGEXP '[[:upper:]]';

Wynik:

+----------------+
| c1             |
+----------------+
| CAFÉ           |
| Café           |
| eCafé          |
| James Bond 007 |
| JB 007         |
| É              |
| É 123          |
| Ø              |
+----------------+

RLIKE jest synonimem REGEXP , więc możemy zastąpić REGEXP z RLIKE aby uzyskać ten sam wynik:

SELECT c1 FROM t1
WHERE c1 RLIKE '[[:upper:]]';

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

Inną opcją jest użycie LOWER() funkcja do porównania oryginalnej wartości z jej odpowiednikiem małymi literami:

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

Wynik:

+----------------+
| c1             |
+----------------+
| CAFÉ           |
| Café           |
| eCafé          |
| James Bond 007 |
| JB 007         |
| É              |
| É 123          |
| Ø              |
+----------------+

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ć).

Domyślnie MariaDB przeprowadza wyszukiwanie bez uwzględniania wielkości liter, więc używam BINARY operatora, aby uzyskać wyszukiwanie z uwzględnieniem wielkości liter.

Można to również zrobić w ten sposób:

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

Opcja 3: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 BINARY c1 REGEXP BINARY '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';

Wynik:

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

Tym razem zwracanych jest mniej wierszy niż w poprzednich przykładach. To dlatego, że nie określiłem znaków takich jak É i Ø , które zostały zwrócone w poprzednim przykładzie. Nasz wynik zawiera É ale ten wiersz został zwrócony tylko dlatego, że zawiera również inne wielkie litery, które wykonaj dopasuj.

Dlatego musisz upewnić się, że masz wszystkie prawidłowe znaki, jeśli użyjesz tej opcji.

Opcja 4:Porównaj z zakresem znaków

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

SELECT c1 FROM t1
WHERE BINARY c1 REGEXP BINARY '[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. COUNT() Funkcja w MariaDB

  2. Jak ASCII() działa w MariaDB

  3. Kerberos dla SQLyog przez MariaDB Connector/C

  4. Migracja sieci bez przestojów za pomocą klastra MySQL Galera przy użyciu węzła przekaźnikowego

  5. Dostarczanie szybszych innowacji do społeczności MariaDB