Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

SQL untuk menemukan kata-kata huruf besar dari kolom

Ini bisa jadi caranya:

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

Idenya adalah untuk menandai setiap string, lalu memotong kata-kata yang tidak dibuat oleh karakter huruf besar dan kemudian menggabungkan kata-kata yang tersisa.

Hasilnya:

1    EXAMPLE
2    TEST
3    VALUE
4    IS EXAMPLE

Jika Anda perlu menangani beberapa karakter lain sebagai huruf besar, Anda dapat mengedit where kondisi untuk menyaring kata-kata yang cocok; misalnya, dengan '_':

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

memberikan:

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. Bagaimana saya bisa memilih catatan HANYA dari kemarin?

  2. Addnode resolv.conf Kegagalan

  3. Oracle sql untuk menghitung instance dari nilai yang berbeda dalam satu kolom

  4. Downtime dan Hotpatch menerapkan mode di adop R12.2

  5. Bagaimana cara memilih kolom dari tabel yang memiliki nilai bukan nol?