MS SQL Filtrowanie danych na podstawie dat.

MS SQL Filtrowanie danych na podstawie dat.
PA
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:33
0

Hej,
Mając w tabeli X 3 kolumny np. NazwaUmowy, DataOd, DataDo mam za zadanie wyświetlić umowy których zakres obowiązywania mieści się w parametrach DataOd, DataDo.

Na początku przychodzi na myśli oczywiście prosty filtr poprzez select .NazwaUmowy from X where DataOd >= '2017-10-01 'and DataDo <= ''2018-03-31'.
Jednak załóżmy, że jedna umowa zawiera dane:
DataOd | DataDo
2017-06-01 | 2017-10-21
Czyli jeżeli chcę wyświetlić dane: DataOd >= '2017-10-01 'and DataDo <= ''2018-03-31'. to nie pokaże mi tej umowy., ponieważ okres jej obowiązywania jest od 2017-06-01.
Wynik mojego działania ma zwracać dane nawet w przypadku, gdy umowa obowiązywała NAWET przez jeden dzień danego miesiąca, więc skoro umowa obowiązuje do 2017-10-21 to zapytanie powinno mi zwrócić październik.
Proszę o pomoc i wskazówki jak powinno wyglądać działanie.

edytowany 1x, ostatnio: pawlag
kate87
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 3 lata
0

Ja bym w where w tym prostym selecie zrobiła (select to_char(dataDo, 'MM') from tabela) i tyle.

edytowany 1x, ostatnio: kate87
PA
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:33
0
kate87 napisał(a):

Ja bym w where w tym prostym selecie zrobiła (select to_char(dataDo, 'MM') from tabela) i tyle.

Możesz szerzej wyjaśnić jak miałoby to wyglądać? Bo wydaje mi się, że to co napisałaś jedynie konwertuje wynik.
A ja bym chciał: zakładając, że dana umowa obowiązuje:
DataOd | DataDo
2017-06-01 | 2017-10-21

Chcąć wyświetlić dane( dla parametrów DataOd >= '2017-10-01 'and DataDo <= ''2018-03-31') normalnie stworzyłbym zapytanie select * from tabela where DataOd >= '2017-10-01 'and DataDo <= ''2018-03-31'. I to nie pokaże mi tej umowy., ponieważ okres jej obowiązywania jest od 2017-06-01.
Wynik mojego działania ma zwracać dane nawet w przypadku, gdy umowa obowiązywała przez jeden dzień danego miesiąca, więc skoro umowa obowiązuje do 2017-10-21 to zapytanie powinno mi zwrócić tylko październik.

edytowany 2x, ostatnio: pawlag
kate87
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 3 lata
1

Data i czas Ogólnie 'MM' zwraca numer miesiąca z daty. Dlatego pokaże Ci wszystko co ma dokładnie ten numer miesiąca.

Marcin.Miga
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 20 godzin
  • Postów:2792
1

Myślę, że chodzi ci o daty "na krzyż":
http://sqlfiddle.com/#!18/15687/3

PA
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:33
0
Marcin.Miga napisał(a):

Myślę, że chodzi ci o daty "na krzyż":
http://sqlfiddle.com/#!18/15687/3

Hehe zadziałało dzięki! Jeszcze chciałbym doprecyzować - bo w tym przypadku wyciągam * czyli wszystkie dane, natomiast chciałbym wyjąć kolumnę tylko z tym miesiącem , który mi znalazło zapytanie.

edytowany 1x, ostatnio: pawlag

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.