sql >> Databáze >  >> RDS >> PostgreSQL

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

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

Ukázková data

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

SELECT c1 FROM t1;

Výsledek:

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

Můžeme použít ~ operátor k provedení shody vzoru regulárního výrazu s rozlišováním malých a velkých písmen. Vzor může být jednoduchý nebo složitý, jak chceme.

Jednoduchou možností je porovnat náš sloupec s [:upper:] Třída znaků POSIX:

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

Výsledek:

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

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

Další možností je 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:

       c1       
----------------
 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í PostgreSQL provádí shodu rozlišující malá a velká písmena, a proto k dosažení požadovaného výsledku nemusíme zadávat řazení rozlišující malá a velká písmena.

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

Další možností je použít kód ~ operátor se vzorem regulárního výrazu, který explicitně zahrnuje každý velký znak, který chceme porovnat:

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

Výsledek:

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

V tomto případě 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.

Proto je tato možnost omezenější než předchozí, ale poskytuje vám větší kontrolu nad postavami, které chcete najít.

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

Alternativně můžeme zadat rozsah znaků, které chceme porovnat:

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

Výsledek:

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

  1. SSMS nyní přichází s Azure Data Studio

  2. Spouštěče MySQL nemohou aktualizovat řádky ve stejné tabulce, ke které je spouštěč přiřazen. Navrhované řešení?

  3. Jak používat funkci SQL SUM

  4. Jak získat aktuální hodnotu věštecké sekvence bez jejího zvýšení?