Nedenfor er tre muligheder for at bruge T-SQL til at returnere den første dag i måneden i SQL Server.
Dette kan være den første dag i den aktuelle måned eller den første dag i en måned baseret på en given dato.
Mulighed 1
En måde at gøre det på er sådan her:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(dd, -( DAY( @date ) -1 ), @date);
Resultat:
2035-10-01
Dette indebærer brug af nogle T-SQL-funktioner til at udføre datoskift for at få datoen tilbage til begyndelsen af måneden.
For mere information om DATEADD()
og DAY()
funktioner, se DATEADD()
Eksempler i SQL Server og DAY()
Eksempler i SQL Server.
Mulighed 2
Her er en anden mulighed for at få den første dag i måneden:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(month, DATEDIFF(month, 0, @date), 0);
Resultat:
2035-10-01 00:00:00.000
Her inkorporerede vi DATEDIFF()
funktion ind i vores beregning.
Selvom vi erklærede den indledende variabel som en date
værdi, er resultatet en datetime
værdi. Vi kan bruge CONVERT()
eller CAST()
at konvertere resultatet til en date
værdi:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT CAST(DATEADD(month, DATEDIFF(month, 0, @date), 0) AS date);
Resultat:
2035-10-01
Mulighed 3
Her er en anden mulighed:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;
Resultat:
2035-10-01 00:00:00.000
I lighed med mulighed 2 er resultatet en datetime
værdi, men denne gang er det fordi vi har erklæret variablen som en datetime
værdi. Vi kan dog give den samme behandling for at konvertere den til en date
værdi:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date - DAY( @date ) + 1 AS date);
Resultat:
2035-10-01
Årsagen til, at vi ikke erklærede variablen som en date
værdi er fordi det ville resultere i en fejl:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;
Resultat:
Msg 206, Level 16, State 2, Line 3 Operand type clash: date is incompatible with int
Dette er fordi vi forsøger at tilføje et heltal til en date
værdi, som ikke virker. Men tilføjelse af et heltal til en datetime
værdi virker, og det er derfor, vi erklærede variablen som datetime
.