Oracle
 sql >> Baza danych >  >> RDS >> Oracle

4 sposoby znajdowania wierszy zawierających wielkie litery w Oracle

Oto cztery opcje zwracania wierszy zawierających duże litery w bazie danych Oracle.

Przykładowe dane

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

SELECT c1 FROM t1;

Wynik:

CAFÉ
Café
café
1café
eCafé
James Bond 007
JB 007
007
É
É 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

Oracle REGEXP_LIKE warunek jest zgodny ze standardem wyrażeń regularnych POSIX i wytycznymi dotyczącymi wyrażeń regularnych Unicode. Możemy zatem użyć [:upper:] Klasa znaków POSIX do sprawdzania wielkich liter:

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[[:upper:]]');

Wynik:

CAFÉ
Café
eCafé
James Bond 007
JB 007
É
É 123
Ø

Opcja 2: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:

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 Oracle przeprowadza wyszukiwanie z uwzględnieniem wielkości liter, więc nie muszę robić nic więcej w zapytaniu, aby rozróżniać wielkość liter.

Opcja 3:Porównaj z rzeczywistymi znakami

Inną opcją jest użycie REGEXP_LIKE warunek ze wzorcem wyrażenia regularnego, który jawnie zawiera każdy znak wielkiej litery, który chcemy dopasować:

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]', 'c');

Wynik:

CAFÉ
Café
eCafé
James Bond 007
JB 007

'c' określa dopasowanie z uwzględnieniem wielkości liter i akcentu, nawet jeśli określone sortowanie warunku nie uwzględnia wielkości liter lub akcentu.

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 tych przykładach. 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.

Oto znowu z tymi dwiema postaciami w zestawie:

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[ÉØABCDEFGHIJKLMNOPQRSTUVWXYZ]', 'c');

Wynik:

CAFÉ
Café
eCafé
James Bond 007
JB 007
É
É 123
Ø

Opcja 4: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 REGEXP_LIKE(c1, '[A-Z]', 'c');

Wynik:

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. Funkcja HEXTORAW() w Oracle

  2. Jak dodać pionowe obramowania do siatki wyjściowej SQL*Plus / SQLcl?

  3. Jak wywołać procedurę składowaną w pakiecie Oracle za pomocą Entity Framework?

  4. Jak mogę uzyskać liczbę rekordów, których dotyczy procedura składowana?

  5. Nie możesz użyć zapytania LIKE w PreparedStatement JDBC?