sql >> Database teknologi >  >> RDS >> Sqlserver

3 måder at få den første dag i måneden i SQL Server

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 .


  1. Brug af DateTime i en SqlParameter til Stored Procedure, formateringsfejl

  2. SQL Server Join Estimation ved hjælp af Histogram Coarse Alignment

  3. Sådan listes alle databaser ved hjælp af PostgreSQL

  4. En dedikeret lagret procedure for at få den seneste database-backup-status