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

Truy vấn SQL để chuyển đổi biểu thức cron sang định dạng ngày / giờ

Bạn có thể sử dụng regexp_substr chức năng trích xuất các phần tử riêng lẻ từ bộ lịch biểu. Ví dụ:regexp_substr(schedule, '[0-9*]+', 1,1) sẽ trích xuất phần tử phút, trong khi regexp_substr(sched, '[0-9*]+', 1, 2) sẽ trích xuất phần tử giờ. Tham số thứ 4 chọn phần tử mong muốn. Sau đó, bạn có thể sử dụng EXTRACT hoặc TO_CHAR chức năng lấy ở các phần khác nhau của dấu thời gian của bạn để so sánh.

with cron(ID, Sched) as (
  select 102, '00 9 * * * *' from dual
), exec(id, ts) as (
  select 102, to_timestamp('2017-11-05 9:00:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
  select 102, to_timestamp('2017-11-05 9:05:00', 'yyyy-mm-dd hh24:mi:ss') from dual
), c2 as (
select id
     , sched 
     , regexp_substr(sched,'[0-9*]+',1,1) min
     , regexp_substr(sched,'[0-9*]+',1,2) hour
     , regexp_substr(sched,'[0-9*]+',1,3) day
     , regexp_substr(sched,'[0-9*]+',1,4) mon
     , regexp_substr(sched,'[0-9*]+',1,5) wday
     , regexp_substr(sched,'[0-9*]+',1,6) year
  from cron
)
select c2.*
     , exec.ts
     , case when (year = '*' or to_number(to_char(ts,'yyyy')) = to_number(year))
             and (mon  = '*' or to_number(to_char(ts,'mm')  ) = to_number(mon ))
             and (day  = '*' or to_number(to_char(ts,'dd')  ) = to_number(day ))
             and (hour = '*' or to_number(to_char(ts,'hh24')) = to_number(hour))
             and (min  = '*' or to_number(to_char(ts,'mi')  ) = to_number(min ))
             and (wday = '*' or to_number(to_char(ts,'d')   ) = to_number(wday))
            then 'OK'
            else 'KO'
       end Match
  from exec 
  join c2 
    on c2.id = exec.id;

di chuyển một phần hoặc toàn bộ biểu thức logic khỏi câu lệnh trường hợp nếu cần để nhận được kết quả bạn cần.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cài đặt phần mềm Oracle Database 12c trên Windows

  2. Làm thế nào bạn có thể biết tệp tnsnames.ora nào được sử dụng bởi một cuộc gọi .net?

  3. Oracle DB đơn giản CHỌN trong đó thứ tự cột quan trọng

  4. Cách trả lại Dấu thời gian Unix trong Oracle

  5. Giới thiệu Trình điều khiển Easysoft Oracle® vào Môi trường SOA của bạn