Oracle
 sql >> база данни >  >> RDS >> Oracle

4 начина за намиране на редове, които съдържат главни букви в Oracle

Ето четири опции за връщане на редове, които съдържат главни букви в Oracle Database.

Примерни данни

Да предположим, че имаме таблица със следните данни:

SELECT c1 FROM t1;

Резултат:

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

Можем да използваме следните методи, за да върнем редовете, които съдържат главни букви.

Опция 1:Сравнете с POSIX клас символи

REGEXP_LIKE на Oracle условието отговаря на стандарта за регулярни изрази POSIX и насоките за регулярни изрази на Unicode. Следователно можем да използваме [:upper:] POSIX клас символи за проверка за главни букви:

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

Резултат:

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

Опция 2:Сравнете с LOWER() Низ

Можем да използваме LOWER() функция за сравняване на оригиналната стойност с нейния еквивалент с малки букви:

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

Резултат:

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

Чрез използване на не е равно на (<> ) оператор (алтернативно можете да използвате != вместо <> ако предпочитате), ние връщаме само онези редове, които са различни от техните еквиваленти с малки букви. Причината да правим това е, че ако дадена стойност е същата като нейния еквивалент с малки букви, тогава тя вече е била с малки букви (и не искаме да я връщаме).

По подразбиране Oracle извършва търсене според главните и малки букви и затова не е необходимо да правя нищо друго със заявката, за да я направя чувствителна към малки и малки букви.

Опция 3:Сравнете с действителните знаци

Друга възможност е да използвате REGEXP_LIKE условие с модел на регулярен израз, който изрично включва всеки знак с главни букви, който искаме да съпоставим:

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

Резултат:

CAFÉ
Café
eCafé
James Bond 007
JB 007

'c' указва съвпадение, чувствително към малки и големи букви и ударение, дори ако определеното съпоставяне на условието не е чувствително към главни или ударение.

Този път се връщат по-малко редове, отколкото в предишните примери. Това е, защото не съм посочил знаци като É и Ø , които бяха върнати в тези примери. Нашият резултат съдържа É но този ред беше върнат само защото съдържа и други главни букви, които правят съвпадение.

Следователно, ако използвате тази опция, ще трябва да се уверите, че имате всички валидни знаци.

Ето го отново с включени тези два знака:

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

Резултат:

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

Опция 4:Сравнете с набор от знаци

Друг начин да го направите е да посочите диапазона от главни букви, които искаме да съпоставим:

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

Резултат:

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. Списък на елементите на числовия формат в Oracle

  2. Как да получите скрипт за таблица в Oracle SQL Developer?

  3. Trunc поле за дата в mysql като Oracle

  4. Как да създадете функция в PL/SQL?

  5. Използвайте tnsnames.ora в Oracle SQL Developer