sql >> Databáze >  >> RDS >> Oracle

4 způsoby, jak v Oracle najít řádky, které obsahují velká písmena

Zde jsou čtyři možnosti pro vrácení řádků, které obsahují velká písmena v databázi Oracle.

Ukázková data

Předpokládejme, že máme tabulku s následujícími údaji:

SELECT c1 FROM t1;

Výsledek:

CAFÉ
Café
café
1café
eCafé
James Bond 007
JB 007
007
É
É 123
é
é 123
ø
Ø

K vrácení řádků, které obsahují velká písmena, můžeme použít následující metody.

Možnost 1:Porovnání s třídou znaků POSIX

REGEXP_LIKE společnosti Oracle podmínka vyhovuje standardu regulárních výrazů POSIX a směrnicím Unicode pro regulární výrazy. Můžeme tedy použít [:upper:] Třída znaků POSIX pro kontrolu velkých písmen:

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

Výsledek:

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

Možnost 2:Porovnejte s LOWER() Řetězec

Můžeme použít LOWER() funkce pro porovnání původní hodnoty s jejím malým ekvivalentem:

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

Výsledek:

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

Pomocí nerovná se (<> ) operátor (můžete také použít != místo <> pokud chcete), vracíme pouze ty řádky, které se liší od jejich malých ekvivalentů. Důvodem, proč to děláme, je to, že pokud je hodnota stejná jako její ekvivalent malým písmenem, pak již byla na začátku malá (a my to nechceme vracet).

Ve výchozím nastavení Oracle provádí vyhledávání rozlišující malá a velká písmena, a proto nemusím s dotazem dělat nic jiného, ​​aby se rozlišovala malá a velká písmena.

Možnost 3:Porovnání se skutečnými postavami

Další možností je použít REGEXP_LIKE podmínku se vzorem regulárního výrazu, který explicitně zahrnuje každý velký znak, který chceme porovnat:

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

Výsledek:

CAFÉ
Café
eCafé
James Bond 007
JB 007

'c' specifikuje shodu rozlišující malá a velká písmena a zvýraznění, i když určené řazení podmínky nerozlišuje velká a malá písmena nebo zvýraznění.

Tentokrát je vráceno méně řádků než v předchozích příkladech. Je to proto, že jsem nespecifikoval znaky jako É a Ø , které byly vráceny v těchto příkladech. Náš výsledek obsahuje É ale tento řádek byl vrácen pouze proto, že obsahuje také další velká písmena, která dělají zápas.

Pokud tedy použijete tuto možnost, musíte se ujistit, že máte pokryty všechny platné znaky.

Zde je to znovu s těmito dvěma zahrnutými znaky:

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

Výsledek:

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

Možnost 4:Porovnání s řadou znaků

Dalším způsobem, jak to udělat, je zadat rozsah velkých písmen, které chceme porovnat:

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[A-Z]', 'c');

Výsledek:

CAFÉ
Café
eCafé
James Bond 007
JB 007

  1. Migrace PostgreSQL databází z On-Prem do cloudu pomocí AWS RDS

  2. Jak získat vstup od uživatele za běhu

  3. Všechny užitečné 11g dynamické zobrazení výkonu

  4. Jak flexibilní/omezující jsou typy sloupců SQLite?