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

SQL заявка за преобразуване на cron израз във формат за дата/час

Можете да използвате regexp_substr функция за извличане на отделни елементи от кортежа на графика. Например regexp_substr(schedule, '[0-9*]+', 1,1) ще извлече минутния елемент, докато regexp_substr(sched, '[0-9*]+', 1, 2) ще извлече часовия елемент. Четвъртият параметър избира желания елемент. След това можете да използвате или EXTRACT или TO_CHAR функция за получаване на различни части от вашето времево клеймо за сравнение.

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;

преместете логическия израз от оператора case частично или изцяло, както е необходимо, за да получите нужните резултати.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Избягвайте CHAR-подрязване, когато използвате eclipselink

  2. Вземете дума след конкретна дума с помощта на regexp_substr в sql oracle

  3. Отменете привилегиите в Oracle

  4. Инсталиране на JDBC за Jboss EAP 6.3

  5. Кодиране на набор от символи и фактори за размер на паметта