W SQL Server 2008 istnieje date
typ danych, który nie ma dołączonego czasu. W ten sposób możesz łatwo usunąć część czasu, po prostu konwertując, a następnie wykonując DateAdd
.
SELECT DateAdd(month, -1, Convert(date, GetDate()));
To zwróci date
typ danych. Aby wymusić ustawienie datetime
ponownie, możesz po prostu dodać jeszcze jeden Convert
:
SELECT Convert(datetime, DateAdd(month, -1, Convert(date, GetDate())));
Możesz nie potrzebować jawnej konwersji na datetime
jednak.
Uwaga:„Miesiąc temu od dzisiaj” można zdefiniować na wiele różnych sposobów. Sposób działania serwera SQL polega na zwróceniu dnia z poprzedniego miesiąca, który jest najbliższy temu samemu numerowi dnia, co miesiąc bieżący. Oznacza to, że wynikiem tego wyrażenia po uruchomieniu 31 marca będzie 28 lutego. Tak więc możesz nie uzyskać oczekiwanych wyników w niektórych scenariuszach, jeśli nie myślisz jasno o konsekwencjach tego, na przykład gdy wykonałeś jedno- obliczanie miesiąca wiele razy, spodziewając się tego samego dnia w innym miesiącu (np. marzec -> luty -> styczeń).
Zobacz demonstrację na żywo w SQL Fiddle
Demo pokazuje wartości i wynikowe typy danych każdego wyrażenia.