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. Следователно можем да използваме [:lower:] POSIX клас символи за проверка за малки букви:

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

Резултат:

Café
café
1café
eCafé
James Bond 007
é
é 123
ø

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

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

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

Резултат:

Café
café
1café
eCafé
James Bond 007
é
é 123
ø

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

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

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

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

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

Резултат:

Café
café
1café
eCafé
James Bond 007

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

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

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

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

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[éøabcdefghijklmnopqrstuvwxyz]', 'c');

Резултат:

Café
café
1café
eCafé
James Bond 007
é
é 123
ø

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

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

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[a-z]', 'c');

Резултат:

Café
café
1café
eCafé
James Bond 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. Spool команда:Не извеждайте SQL израз във файл

  2. Създаване на тригер, който да се изпълнява само когато се създава нова таблица

  3. Извикване на запаметена процедура на Oracle с изходен параметър от SQL Server

  4. Инсталиране на Oracle Forms and Reports 11g Release 2

  5. Свързване към база данни на Oracle с помощта на SQLAlchemy