Oracle/PLSQL – figle z datą

Gdyby ktoś potrzebował wydłubać coś z daty za pomocą SQL, to dziś zbiór przekształceń. Normalnie, zaszalałem…

Często, pisząc jakieś zapytanie, kombinuję, jak coś wyliczyć z daty. Na każdy problem rozwiązań jest wiele, najlepsze są najbardziej optymalne. A więc najpierw wyniki zapytań, a potem kod. Smacznego.


OPISWYNIK
data w formacie yyyy-mm-dd2019-10-04
rok ma dni365
dni od początku roku277
dni do końca roku88
miesiącpaździernik – paź – 10
miesiąc ma dni31
dzień tygodniapiątek – Pt – 5
tydzień w roku40
tydzień w miesiącu1
miesiąc zaczyna się odwtorek (2019-10-01)
rok zaczyna się odwtorek (2019-01-01)
dzień zawiera się w tygodniu2019-09-30 – 2019-10-06

A oto kod:

with d as (select sysdate dt from dual)
select 'data w formacie yyyy-mm-dd' opis, to_char(dt,'yyyy-mm-dd') wynik from d
union all
select 'rok ma dni', to_char(ADD_MONTHS(TRUNC(dt,'Y'),12)-TRUNC(dt,'Y')) from d
union all
select 'dni od początku roku', to_char(dt, 'ddd') from d
union all
select 'dni do końca roku', to_char(ADD_MONTHS(TRUNC(dt,'Y'),12)-TRUNC(dt+1,'ddd') ) from d
union all
select 'miesiąc', to_char(dt, 'month') || ' - ' || to_char(dt, 'mon')  || ' - ' || to_char(dt, 'mm')  from d
union all
select 'miesiąc ma dni', to_char(LAST_DAY(dt),'dd') from d
union all
select 'dzień tygodnia', to_char(dt, 'day') || ' - ' || to_char(dt, 'dy')  || ' - ' || to_char(dt, 'd')  from d
union all
select 'tydzień w roku', to_char(dt, 'ww')   from d
union all
select 'tydzień w miesiącu', to_char(dt, 'w')  from d
union all
select 'miesiąc zaczyna się od', to_char(TRUNC(dt, 'MM') ,'day') ||' ('|| to_char(TRUNC(dt, 'MM') ,'yyyy-mm-dd') ||')' from d
union all
select 'rok zaczyna się od', to_char(TRUNC(dt, 'yy') ,'day') ||' ('|| to_char(TRUNC(dt, 'yy') ,'yyyy-mm-dd') ||')' from d
union all
select 'dzień zawiera się w tygodniu', to_char(next_day(dt-7,1),'yyyy-mm-dd')|| ' - '|| to_char(next_day(dt,7),'yyyy-mm-dd') from d

Nie potrzebujecie tego w piątek? Ale pamiętajcie o poniedziałku. On nadejdzie!

Ten wpis został opublikowany w kategorii SQL i oznaczony tagami , , , . Dodaj zakładkę do bezpośredniego odnośnika.

Co o tym myślisz?

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie na Google

Komentujesz korzystając z konta Google. Wyloguj /  Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Połączenie z %s