sql >> Database >  >> RDS >> Sqlserver

3 manieren om de eerste dag van de maand in SQL Server te krijgen

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 .


  1. C#:Oracle Data Type Equivalentie met OracleDbType

  2. Array doorgeven aan Oracle-procedure vanuit c#

  3. Het minimaliseren van de impact van het verbreden van een IDENTITEIT-kolom - deel 2

  4. Hoe een afbeelding op te slaan in de kolom SQL Server-databasetabellen