2017-05-27 2 views
0

ich eine SQL-Select-Anweisung müssen alle Mitarbeiter abzurufen, dass ihre enddate Vertrag 3 Monate ab sofort endet und nur 3 Monate nicht mehr oder wenigerSQL Server 3 Monate ab jetzt

+1

Bitte geben Sie Beispieldaten und gewünschte Ergebnisse an. "3 Monate von jetzt an" ist mehrdeutig. Betrachten Sie den 31. Januar. 3 Monate später wäre der 31. April. . . aber dieses Datum existiert nicht. –

+0

Mitarbeitervertrag abgelaufen am 01/09/2017, also brauche ich eine Funktion, um die Enddauer des Vertrags vor 3 Monaten zu kennen –

+0

Verdeutlichen Sie die Spezifikationen zuerst: 3 Monate ist keine mathematische Beschreibung. Höchstwahrscheinlich möchten Sie entweder 90 Tage oder eine heuristische Berechnung, die das nächste gültige Datum in N Monaten findet. Sie können die Business-Logik aus den Java-Standardbibliotheken unter 'java.time.LocalDate.plusMonths (long)' verwenden: http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/ share/classes/java/time/LocalDate.java # l1295 – ccpizza

Antwort

1
SELECT * 
FROM TABLE_NAME 
WHERE Date_Column >= DATEADD(DAY, +90, GETDATE()) 

ODER

SELECT * 
FROM TABLE_NAME 
WHERE Date_Column >= DATEADD(MONTH, +3, GETDATE()) 

ODER

SELECT * 
FROM TABLE_NAME 
WHERE DATEDIFF(MONTH, my_date_column, GETDATE()) <= 3 
+1

DATEADD (Monat, 3, getdate()) ist besser. – TriV

+0

@TriV ... Yupp :) –

3

Es hängt davon ab, was Sie in 3 Monaten von jetzt an meinen. Wenn Sie an diesem genauen Datum meinen, dann:

WHERE my_date_column = cast(dateadd(month, 3, getdate()) as date) 

Beachten Sie die Besetzung, um die Zeitkomponente zu entfernen. Dies ist mehrdeutig und unter Umständen können Mitarbeiter vermissen oder sie zweimal zählen.

Wenn Sie Mitarbeiter, dessen Vertrag endet im 3. Monat von heute, dann verwenden:

WHERE DATEDIFF(month, getdate(), my_date_column) = 3 

Also, wenn im Januar dieses Jahr, wird dieser Mitarbeiter zurückkehren, dessen Vertrag endet jederzeit im April.

Verwandte Themen