2012-07-26 8 views

Antwort

0

Es beginnt den aktuellen Monat. Es zählt die Anzahl der Monate seit Januar 1900, und fügt sie bis 1 Januar 1900 den Beginn des aktuellen Monats für ein bestimmtes Datum

+0

Ich dachte immer, dass das Einstellen des Tages auf 1 das gleiche Ergebnis erzielt, aber viel einfacher ist? –

26

dies werden Sie die ersten Tag des Monats erhalten

Innen wählen select DATEDIFF(MONTH, 0, GETDATE()) wird die Anzahl der Monate geben von 1900-01-01

hier wird es 1350

dies 1900-01-01 hinzufügen wird, sondern nur die Monate

select DATEADD(MONTH,1350,0) wird geben 2012-07-01 00: 00: 00.000

das ist der Beginn des aktuellen Monats.

Ich denke, dies ist der effizienteste Weg, um den Beginn eines Monats für ein bestimmtes Datum zu finden.

0
The DATEDIFF will give you date diff in month from January 1 1900 to current date 
AND 
The DATEADD will add (DATEDIFF) results months to your last parameter of DATEADD 
0

Die DATEADD Funktion fügt ein Intervall zu einem Datum, das Sie angeben. Für Beispiel, wenn die Fälligkeiten aller Aufträge in der Tabelle Salesorderheader 3 Tage gerutscht, konnte man die neuen Daten mit der folgenden Anweisung erhalten:

USE AdventureWorks; 
GO 
SELECT DATEADD(day, 3, DueDate) 
FROM Sales.SalesOrderHeader; 
GO 

Die DATEDIFF Funktion berechnet den Zeitraum von Zeit in Dateiteilen zwischen dem zweiten und ersten von zwei Daten, die Sie angeben. Mit anderen Worten, es findet ein Intervall zwischen zwei Daten. Das Ergebnis ist eine vorzeichenbehaftete ganze Zahl Wert gleich Datum2 - Datum1 in Datum Teile. Die folgende Abfrage verwendet das Datum 30. November 2001, und findet die Anzahl der Tage, die zwischen DueDate und diesem Datum verstrichen:

USE AdventureWorks; 
GO 
SELECT DATEDIFF(day, DueDate, 'Nov 30 2001') 
FROM Sales.SalesOrderHeader; 
GO 



SELECT DATEDIFF(year, '20051220', '20060101') 
SELECT DATEDIFF(month, '20051220', '20060101') 
SELECT DATEDIFF(day, '20051220', '20060101') 
3

die DateDiff-Funktion gibt, wie viele Sekunden, Monate, Jahre - was auch immer Intervall Sie geben zwischen dem ersten Datum (hier 0) und dem zweiten Datum (hier das aktuelle Datum) an.

 DATEDIFF(MONTH, 0, '2-14-2014') --returns month. 0 is for 1/1/1900, and getdate is the current date 
    --(i used a set date bc dates will change as this post gets older). 
    result: 1381 

In meinen Arbeiten, habe ich das Datum des 2014.02.14 und es gab mir 1381 Anzahl der Monate seit 1.1.1900. Ich habe 1381 in die dateadd Funktion wie so ...

 select Dateadd(MONTH, 1381, 0) 
    result: 2015-02-01 00:00:00.000 

Grundsätzlich wird es am ersten Tag des Monats, was in dem Datum der innersten Formel angegeben wird.

Der Code, den ich herausfinden musste, ging einen Schritt weiter und subtrahierte 1 Sekunde von diesem Ergebnis, um den letzten Tag des Monats um 11:59:59 so zu bekommen ...

 select DATEADD(s, -1, '2015-02-01 00:00:00.000') 

Die Formel alles so ausdrücken sieht zusammen:

 DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,getdate())+1,0)) 

Hope this jemand hilft. :)

Verwandte Themen