Oracle
 sql >> Baza danych >  >> RDS >> Oracle

SQL, aby znaleźć słowa pisane wielkimi literami z kolumny

To może być sposób:

-- a test case
with test(id, str) as (
select 1, 'This is a EXAMPLE' from dual union all
select 2, 'This is a TEST' from dual union all
select 3, 'This is a VALUE' from dual union all
select 4, 'This IS aN EXAMPLE' from dual
)
-- concatenate the resulting words
select id, listagg(str, ' ') within group (order by pos)
from (
    -- tokenize the strings by using the space as a word separator
    SELECT id,
           trim(regexp_substr(str, '[^ ]+', 1, level)) str,
           level as pos           
      FROM test t
    CONNECT BY instr(str, ' ', 1, level - 1) > 0
      and prior id = id
      and prior sys_guid() is not null
    )
-- only get the uppercase words
where regexp_like(str, '^[A-Z]+$')   
group by id

Chodzi o to, aby tokenizować każdy ciąg, a następnie odciąć słowa, które nie składają się z wielkich liter, a następnie połączyć pozostałe słowa.

Wynik:

1    EXAMPLE
2    TEST
3    VALUE
4    IS EXAMPLE

Jeśli potrzebujesz obsługiwać inny znak jako wielką literę, możesz edytować where warunek do filtrowania pasujących słów; na przykład z '_':

with test(id, str) as (
select 1, 'This is a EXAMPLE' from dual union all
select 2, 'This is a TEST' from dual union all
select 3, 'This is a VALUE' from dual union all
select 4, 'This IS aN EXAMPLE' from dual union all
select 5, 'This IS AN_EXAMPLE' from dual
)
select id, listagg(str, ' ') within group (order by pos)
from (
    SELECT id,
           trim(regexp_substr(str, '[^ ]+', 1, level)) str,
           level as pos           
      FROM test t
    CONNECT BY instr(str, ' ', 1, level - 1) > 0
      and prior id = id
      and prior sys_guid() is not null
    )
where regexp_like(str, '^[A-Z_]+$')   
group by id

daje:

1   EXAMPLE
2   TEST
3   VALUE
4   IS EXAMPLE
5   IS AN_EXAMPLE


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. przykłady składni sprzężenia oracle

  2. Oracle ODP.Net z Entity Framework 6 — nie można znaleźć dostawcy zgodnego z bazą danych Entity Framework

  3. ROWIDTONCHAR() Funkcja w Oracle

  4. Czy kolejność tabel, do których odwołuje się klauzula ON w JOIN, ma znaczenie?

  5. Dołącz do siebie w wyroczni z przykładami