Oto cztery opcje zwracania wierszy zawierających mał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ć [:lower:]
Klasa znaków POSIX do sprawdzania małych liter:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[[:lower:]]');
Wynik:
Café café 1café eCafé James Bond 007 é é 123 ø
Opcja 2: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:
Café café 1café eCafé James Bond 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 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ć).
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żdą małą literę, którą chcemy dopasować:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[abcdefghijklmnopqrstuvwxyz]', 'c');
Wynik:
Café café 1café eCafé James Bond 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 małe 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é 1café eCafé James Bond 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é 1café eCafé James Bond 007