Oracle
 sql >> Baza danych >  >> RDS >> Oracle

SQL Query do konwersji wyrażenia cron na format daty/czasu

Możesz użyć regexp_substr funkcja wyodrębniania poszczególnych elementów z krotki harmonogramu. Na przykład regexp_substr(schedule, '[0-9*]+', 1,1) wyodrębni element minut, podczas gdy regexp_substr(sched, '[0-9*]+', 1, 2) wyodrębni element godziny. Czwarty parametr wybiera żądany element. Następnie możesz użyć EXTRACT lub TO_CHAR funkcja, aby uzyskać różne części znacznika czasu w celu porównania.

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;

przenieś wyrażenie logiczne z instrukcji case w części lub w całości, aby uzyskać potrzebne wyniki.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. wyrocznia jak zmienić tabelę dodaj partycję według przedziału zakresu

  2. Dlaczego funkcja Oracle to_char() dodaje spacje?

  3. Zapytanie SQL FIFO z grupowaniem według

  4. Procedura składowana Oracle w problemie z parametrem wyjścia — rozwiązanie — błąd literówki

  5. Instalowanie formularzy i raportów Oracle 11g w wersji 2