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

SQL за намиране на главни букви от колона

Това може да е начин:

-- 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

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

Резултатът:

1    EXAMPLE
2    TEST
3    VALUE
4    IS EXAMPLE

Ако трябва да обработвате някакъв друг знак като главна буква, можете да редактирате where условие за филтриране за съвпадащите думи; например с '_':

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

дава:

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. Коя е перфектната кутия с инструменти за разработка на PL/SQL?

  2. Как да АКТУАЛИЗИРАТЕ една колона, като използвате друга колона в друга таблица? SQL грешка:ORA-00933:SQL командата не е приключила правилно

  3. java.sql.SQLException:ORA-03115:неподдържан тип мрежови данни или представяне

  4. Логически изглед на модела на данни в R12.2

  5. как да добавите секунда в времевата марка на Oracle