Przypuśćmy, że masz tabelę (o nazwie tableWithDate), która ma kolumnę z datą (dateToCheck). Ładujesz dane i zapisujesz dzień na które dane zostały załadowane. Na końcu ładowania danych powinieneś mieć wypełnioną tabelę z dla każdego dnia od 1 stycznia 2014. Chciałbyś sprawdzić dla jakich dni nie zostały załadowane dane.
Pomocne nam będą funkcje do operowania na dacie. Same zapytanie wygląda następująco:
WITH dates as ( SELECT TRUNC(to_date('1/1/2014','DD/MM/YYYY')) -1 + LEVEL AS d FROM DUAL CONNECT BY LEVEL <= 365 ) SELECT d As "Date", to_char(d, 'DDD') As "DayOfYear", to_char(d, 'Day') as "DayOfWeek", to_char(d, 'WW') As "WeekOfYear", to_char(d, 'Month') As "MonthName", to_char(d, 'RM') As "Roman" , to_char(d, 'Q') As "Quarter" FROM dates d where NOT EXISTS ( SELECT tab.dateToCheck from tableWithDate tab where to_char(d.d, 'YYYYMMDD') = to_char(tab.dateToCheck, 'YYYYMMDD') group by tab.dateToCheck ) ORDER BY d ;Do wyświetlenia daty pomocna nam będzie funkcja to_char z formatowaniem. Jeżeli nie będziemy mieli załadowanych danych to wynik zapytania będzie wyglądał następująco: Jeżeli załadujemy dane i w śród tych danych nie będzie danych dla dni: 1-3 i 6 listopada, to tak będzie wyglądał wynik zapytania: