2017-07-17 4 views
1

ich über diese in einer Abfrage gekommen sind:datediff (dd, ... Rückkehr Monat Daten

[date_start] >= DATEADD(dd, -DAY(GETDATE()) + 1, DATEDIFF(dd, 0, GETDATE())) 

Ich verstehe, dass dies zum Teil ist das Zeitelement aus dem Feld zu entfernen, aber kann jemand erklären, Ich wie dies die aktuellen Monat Daten ohne die Verwendung der 'Monat' Funktion zurückgibt?

+0

Haben Sie einen genauen Blick auf die Parameter. Wenn Sie den aktuellen Tag vom aktuellen_datum abziehen, erhalten Sie den letzten Tag des vorherigen Monats: '2017-7-17 - 17 = 2017-06-31'. Und dies subtrahiert eine weniger: "2017-07-17 - (17-1) = 2017-07-01' – dnoeth

+0

die Formel wurde entwickelt, um das 1. Datum des aktuellen Monats zu erhalten ... abziehen des aktuellen Datums und 1 Tag hinzufügen um den Monat zu beginnen – maSTAShuFu

Antwort

0

Es dauert der aktuelle Tag des Monats (Tag (GetDate()) + 1) und subtrahiert es von der Anzahl der ganzen Tage seit Tag 0.

[Date_start] >= 
DATEADD(dd, --Add Integer X to DateTime Y 

-DAY(GETDATE()) + 1, --X = - Current Day of Month + 1 

DATEDIFF(dd, 0, GETDATE()) --Y = The number of days between day 0 and now. 
          --(in whole days to round out the 'time' part of the datetime) 

Es gibt keine Standardfunktion, um dies zu erreichen.

Dein ist nicht viel weniger intuitiv als andere Methoden, die ich habe, obwohl eine negative Zahl Datum gesehen, hinzufügen mit() ist verwirrend, da die Abhängigkeit von dem Ergebnis der datediff() ist implizit von int zu datetime umgewandelt werden .

Andere Methoden Hier: SQL Server Helper - Date Functions

+1

Ein guter Tipp für das Verständnis jeder Frage ist, sie in ihre Bestandteile zu zerlegen. Führe 'SELECT -DAY (GETDATE()) + 1, DATEDIFF (dd, 0, GETDATE())' aus und du wirst sehen, was passiert. – JeffUK

+0

Vielen Dank dafür, schöne kurze Antwort, die ich gesucht habe. Die Auswahl darauf war ein guter Tipp, daran hatte ich nicht gedacht. Sehr geschätzt – jada91