qmic Napisano Sierpień 31, 2009 Zgłoszenie Share Napisano Sierpień 31, 2009 Załóżmy że mam tabelę z dwoma polami START_DATE, END_DATE i podaję zakres dat w zapytaniu, chcę aby zapytanie mi zwróciło wszystkie rekordy których zakres się pokrywa w jakiejkolwiek części pomiędzy tymi datami. Graficznie wygląda to tak START END ----xxx|x-----------------|-------- --------|------------------x|xxxxx--------- xxxxxx|xxxxxxxxxxxxx|xxxxxxxxxx EDIT.Wklejcie to gdzieś gdzie jest czcionka o stałej szerokości aby było lepiej widać Ma ktoś pomysł jak to zrobić? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
multics Napisano Sierpień 31, 2009 Zgłoszenie Share Napisano Sierpień 31, 2009 A nie chodzi czasem o BETWEEN. Link Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
klimas7 Napisano Sierpień 31, 2009 Zgłoszenie Share Napisano Sierpień 31, 2009 Witam. Pola w tabeli to START_DATE, i END_DATA (oczywiści pola te dla każdego rekordu różne od NULL) zakres to DATA_OD i DATA_DO i też obydwa różne od NULL. SELECT * FORM TABELA TAB WHERE TAB.START_DATA <= DATE 'DATA_DO' AND TAB.END_DATA >= DATE 'DATA_OD' jest to na żywca zapytanie z firebirda ale po przeróbce może być ogólne w MySql funkcja DATE ma składnie DATE('2009....') Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
xdarkflame Napisano Sierpień 31, 2009 Zgłoszenie Share Napisano Sierpień 31, 2009 SELECT * FROM TAB WHERE (START_DATE BETWEEN @data_od AND @data_do) OR (END_DATE BETWEEN @data_od AND @data_do) To w jakimś ogólnym języku sqlowym, w mysql'u nigdy nie pisałem nie wiem czy celowo, ale rysunki nie uwzględniają 4 przypadku (a może źle je zrozumiałwm) -----|--xxxx--|----- to trzeba by dodać OR (START_DATE <= @data_od AND END DATE >= @data_do) Oczywiście można to napisać też inaczej. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
qmic Napisano Wrzesień 1, 2009 Autor Zgłoszenie Share Napisano Wrzesień 1, 2009 Dzieki wszystkim, chodziło mi właśnie o between, wszystko pięknie działa jako ciekawostkę powiem że czas wykonywania poprzedniego zapytania bez between zajmowało 2s, natomiast z użyciem between 0,27s. Czyli chyba jest wydajniejsze od standardowych mechanizmów porównań Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się