Hieronder staan drie opties voor het gebruik van T-SQL om de eerste dag van de maand in SQL Server te retourneren.
Dit kan de eerste dag van de huidige maand zijn, of de eerste dag van een maand op basis van een bepaalde datum.
Optie 1
Een manier om dit te doen is als volgt:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(dd, -( DAY( @date ) -1 ), @date);
Resultaat:
2035-10-01
Dit omvat het gebruik van enkele T-SQL-functies om datumverschuivingen uit te voeren om de datum terug te brengen naar het begin van de maand.
Voor meer informatie over de DATEADD()
en DAY()
functies, zie DATEADD()
Voorbeelden in SQL Server en DAY()
Voorbeelden in SQL Server.
Optie 2
Hier is nog een andere optie om de eerste dag van de maand te krijgen:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(month, DATEDIFF(month, 0, @date), 0);
Resultaat:
2035-10-01 00:00:00.000
Hier hebben we de DATEDIFF()
functie in onze berekening.
Hoewel we de initiële variabele hebben gedeclareerd als een date
waarde, het resultaat is een datetime
waarde. We kunnen CONVERT()
. gebruiken of CAST()
om het resultaat te converteren naar een date
waarde:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT CAST(DATEADD(month, DATEDIFF(month, 0, @date), 0) AS date);
Resultaat:
2035-10-01
Optie 3
Hier is nog een optie:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;
Resultaat:
2035-10-01 00:00:00.000
Net als bij optie 2 is het resultaat een datetime
waarde, maar deze keer is het omdat we de variabele hebben gedeclareerd als een datetime
waarde. We kunnen het echter dezelfde behandeling geven om het te converteren naar een date
waarde:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date - DAY( @date ) + 1 AS date);
Resultaat:
2035-10-01
De reden waarom we de variabele niet als een date
hebben gedeclareerd waarde is omdat dat zou resulteren in een fout:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;
Resultaat:
Msg 206, Level 16, State 2, Line 3 Operand type clash: date is incompatible with int
Dit komt omdat we proberen een geheel getal toe te voegen aan een date
waarde, wat niet werkt. Echter, het toevoegen van een geheel getal aan een datetime
waarde werkt, en daarom hebben we de variabele gedeclareerd als datetime
.