V SQL Server 2008 je date
datový typ, který nemá připojený žádný čas. Časovou část tak můžete poměrně snadno odstranit převedením a následným provedením DateAdd
.
SELECT DateAdd(month, -1, Convert(date, GetDate()));
Tím se vrátí date
datový typ. Chcete-li vynutit, aby byl datetime
opět můžete jednoduše přidat další Convert
:
SELECT Convert(datetime, DateAdd(month, -1, Convert(date, GetDate())));
Možná nebudete potřebovat explicitní převod na datetime
, ačkoli.
Poznámka:„Před jedním měsícem ode dneška“ lze definovat mnoha různými způsoby. Na serveru SQL to funguje tak, že vrátí den z předchozího měsíce, který je nejblíže stejnému číslu dne jako aktuální měsíc. To znamená, že výsledkem tohoto výrazu při spuštění 31. března bude 28. únor. Takže v určitých scénářích nemusíte získat očekávané výsledky, pokud neuvažujete jasně o důsledcích toho, jako když jste provedli jedno- měsíční výpočet vícekrát, přičemž se očekává, že získáte stejný den v jiném měsíci (např. březen -> únor -> leden).
Podívejte se na živou ukázku na SQL Fiddle
Demo ukazuje hodnoty a výsledné datové typy každého výrazu.