sql >> Databasteknik >  >> RDS >> Sqlserver

3 sätt att få den första dagen i månaden i SQL Server

Nedan finns tre alternativ för att använda T-SQL för att returnera den första dagen i månaden i SQL Server.

Detta kan vara den första dagen i den aktuella månaden eller den första dagen i en månad baserat på ett givet datum.

Alternativ 1

Ett sätt att göra det är så här:

DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(dd, -( DAY( @date ) -1 ), @date);

Resultat:

2035-10-01

Detta innebär att man använder vissa T-SQL-funktioner för att utföra datumskifte för att få datumet tillbaka till början av månaden.

För mer information om DATEADD() och DAY() funktioner, se DATEADD() Exempel i SQL Server och DAY() Exempel i SQL Server.

Alternativ 2

Här är ett annat alternativ för att få den första dagen i månaden:

DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(month, DATEDIFF(month, 0, @date), 0);

Resultat:

2035-10-01 00:00:00.000

Här har vi införlivat DATEDIFF() funktion i vår beräkning.

Även om vi deklarerade den initiala variabeln som ett date värde, är resultatet en datetime värde. Vi kan använda CONVERT() eller CAST() för att konvertera resultatet till ett date värde:

DECLARE @date date;
SET @date = '2035-10-15';
SELECT CAST(DATEADD(month, DATEDIFF(month, 0, @date), 0) AS date);

Resultat:

2035-10-01

Alternativ 3

Här är ett annat alternativ:

DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;

Resultat:

2035-10-01 00:00:00.000

I likhet med alternativ 2 är resultatet en datetime värde, men den här gången beror det på att vi deklarerade variabeln som en datetime värde. Men vi kan ge det samma behandling för att konvertera det till ett date värde:

DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date - DAY( @date ) + 1 AS date);

Resultat:

2035-10-01

Anledningen till att vi inte deklarerade variabeln som ett date värdet beror på att det skulle resultera i ett fel:

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

Detta beror på att vi försöker lägga till ett heltal till ett date värde, vilket inte fungerar. Men att lägga till ett heltal till en datetime värde fungerar, och det är därför vi deklarerade variabeln som datetime .


  1. Vilken datatyp ska användas för att lagra telefonnummer i SQL Server 2005?

  2. Hur man konverterar UTC-datum till lokal tidszon i MySql Select Query

  3. hur man exporterar data från loggtabellen till e-posttexten i Oracle

  4. Använd e-postadress som primärnyckel?