Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

SQL để tìm các từ viết hoa từ một cột

Đây có thể là một cách:

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

Ý tưởng là mã hóa mọi chuỗi, sau đó cắt bỏ các từ không được tạo bởi các ký tự hoa và sau đó nối các từ còn lại.

Kết quả:

1    EXAMPLE
2    TEST
3    VALUE
4    IS EXAMPLE

Nếu bạn cần xử lý một số ký tự khác dưới dạng chữ hoa, bạn có thể chỉnh sửa where điều kiện để lọc các từ phù hợp; ví dụ:với '_':

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

cho:

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. Làm cách nào để lấy tên cột từ một bảng trong Oracle?

  2. Oracle GROUP_CONCAT () Tương đương

  3. ORA-08177:không thể tuần tự hóa quyền truy cập cho giao dịch này

  4. Cách xử lý Tiết kiệm ánh sáng ban ngày trong cơ sở dữ liệu Oracle

  5. Các bước đồng bộ Chế độ chờ với Cơ sở dữ liệu chính trong Oracle