Mam tabelę z jedną z kolumn jako datę w formacie "RRRR-MM-DD". Czy mogę użyć opcji select, aby uzyskać wszystkie dane w zakresie miesięcznym? Powiedzmy, że chcę wszystkie dane od 2012-01-xx do 2013-04-xx. Więc jestem w zasadzie patrząc na zapytania SQL, jak ten poniżej:Wyboru PostgreSQL między zakresiem miesięcy
SELECT * FROM table WHERE date IN BETWEEN '2012-01' AND '2013-04' (INVALID QUERY)
Od każdego miesiąca rozpoczyna się od „01” można modyfikować powyższe zapytanie, aby dostosować stan początkowy.
SELECT * FROM table WHERE date IN BETWEEN '2012-01-01' AND '2013-04' (INVALID QUERY)
Teraz problem pochodzi z datą końcową. Muszę ręcznie obliczyć ostatnią datę dla danego miesiąca, biorąc pod uwagę wszystkie czynniki, takie jak długość miesiąca, rok przestępny itd., Ponieważ zapytanie nie powiedzie się, jeśli podana data jest nieprawidłowa. Więc obecnie robię coś takiego:
SELECT * FROM table WHERE date IN BETWEEN '2012-01-01' AND 'VALID_MONTH_END_DATE' (VALID Query)
Chcę wiedzieć, czy istnieje sposób na uniknięcie tego ważnego obliczenia daty końcowej?
Wyjaśnienie
myślałem powyżej pierwszego dnia następnego miesiąca, ale nawet wtedy będę musiał zastosować jakąś logikę powiedzieć, czy jego grudnia, w przyszłym miesiącu byłoby stycznia przyszłego roku. Chciałem się dowiedzieć, czy możliwe jest tylko rozwiązanie SQL?
Overlaps działa dobrze, gdy wiem, ostatnią datę. Utknąłem, gdy ostatni miesiąc to grudzień. –
Skąd masz parametry? Aplikacja? Sieć? Kolejne zapytanie? Czy masz je jako ciągi lub liczby całkowite (rok, miesiąc)? –
Należy zachować ostrożność przy dodawaniu "przedziału" do "daty". Wynikiem jest 'timestamp'. Działa jednak w powyższym przykładzie. Prześlij wynik do 'date', jeśli to ma znaczenie. Dodanie interwału "n miesiąca" zawsze daje taki sam dzień miesiąca, niezależnie od faktycznej liczby dni w danych miesiącach - lub maksymalny dostępny dzień, kiedy w wyniku miesiąca będzie mniej dni. Aby dodać dokładną liczbę dni, dodaj "liczbę całkowitą" do "daty", co da "datę". –