2016-07-12 3 views
1

Ich möchte nur die Anzahl der Tage berechnen, die von bestimmtem Zeitpunkt verbleibendenfindet keine der Tage, an aktuellem Monat von bestimmtem Datum verbleibenden

Ex:

, wenn das Datum '02/01/2016' ist dann der Tage auf dem gegebenen Monat verbleibenden '28'

wenn 2016.03.05 dann '25' Tage ...

ich habe versucht, die folgenden

SELECT DATEPART(DD,'03/05/2016') it given me only 5 days 
+0

Sie sowohl Oracle & SQL Server verwenden? – Squirrel

+1

Nur eine Überschrift, 'DATEPART()' gibt den Teil eines Datums zurück, der in ARG1 angegeben wurde. Also, 'DATEPART (DD, '3/5/2016')' wird den Tag Teil dieses Datums, der 5 ist. Es ist nicht 5 Tage, es ist der 5. Tag des März. 'DATEDIFF()' ist, was Sie verwenden möchten, und es gibt einige gute Antworten unten, wie man das macht. Prost! – scsimon

+0

Ich entfernte das Oracle-Tag, weil die Syntax eindeutig SQL Server ist. –

Antwort

3

SQLServer spezifisch, da Sie Version als auch erwähnt:

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

dem letzten Tag des Monats und die Berechnung datediff ist einfach, Below Ausdruck macht das gleiche

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

Auf nur Nötige zu finden, 2012 ist es viel einfacher:

select datediff(day,getdate(),EOMONTH(GETDATE())) 
+0

Es gibt einen Syntaxfehler bei der Abfrage, die Sie gepostet haben – Squirrel

+1

@Squirrel: Danke, ich habe keinen SQL-Server beim Posting zum Testen, ich habe es jetzt getestet – TheGameiswar

0

Da Sie auch Oracle markiert:

SELECT LAST_DAY(DATE '2016-02-01') - DATE '2016-02-01' 
     AS days_remaining 
FROM DUAL; 

Ausgang:

DAYS_REMAINING 
-------------- 
      28 
0

unter Kontrolle,

DECLARE @date DATETIME = '02/05/2016' 
SELECT CASE WHEN month(@date) IN (1,3,5,7,8,10,12) THEN 31 - DATEPART(DD,@date) 
      WHEN month(@date) IN (4,6,9,11) THEN 30 - DATEPART(DD,@date) 
      ELSE 28 - DATEPART(DD,@date) 
      END 

Anmerkung: im obigen Code Schaltjahr nicht berücksichtigt

bearbeitet: Schaltjahr Beweisversion

DECLARE @date DATETIME = '02/05/2016' 
DECLARE @leap_year bit = 0 

IF ((YEAR(@date) % 4 = 0 AND YEAR(@date) % 100 <> 0) OR YEAR(@date) % 400 = 0) 
    SET @leap_year = 1 

SELECT CASE WHEN MONTH(@date) IN (1,3,5,7,8,10,12) THEN 31 - DATEPART(DD,@date) 
     WHEN MONTH(@date) IN (4,6,9,11) THEN 30 - DATEPART(DD,@date) 
     WHEN MONTH(@date) = 2 AND @leap_year = 1 then 29 - DATEPART(DD,@date) 
     ELSE 28 - DATEPART(DD,@date) 
     END 
+1

Nicht 'Schaltjahr' Beweis? Warum nicht Schaltjahr behandeln? – Squirrel

+0

@Squirrel, du hast Recht, werde tun, wenn jemals eine freie Minute haben. – PawelCz

-1
select DATEDIFF(DD, GETDATE(),GETDATE()) 
select DATEDIFF(DD,'2015/10/05','2015/10/07') 
+0

wie funktioniert das? – Squirrel

+0

können Sie versuchen, in sql sever –

+0

Aber wie gibt das "keine der verbleibenden Tage im aktuellen Monat ab dem angegebenen Datum"? – Squirrel

1

für SQL Server

select DATEDIFF(DAY, 
       GETDATE(), 
       DATEADD(MONTH, 
         DATEDIFF(MONTH, 0, GETDATE()) + 1, 
         0) 
       ) - 1 
0

Dies sollte den Trick tun. ich hoffe es hilft. Meine Annahmen sind, dass Sie SQL Server 2008 verwenden. Der Trick hier ist den ersten Tag des nächsten Monats zu erhalten, die immer 01-Nextmonth Jahr

DATEADD (mm, 1, @Date) von ihm

und subtrahiert 1 Tag sein wird, den letzten Tag des laufenden Monats zu erhalten

DATEADD (dd, - 1, CONVERT (VARCHAR (8), DATEADD (mm, 1, @Date), 121) + '01')

Jetzt DatDiff zwischen Eingangsdatum und dem letzten Tag des Eingangs Monat geben Ihnen verbleibenden Tage im Monat

DATEDIFF (dd, @Date, @LastDateofMonth)

DECLARE @Date DATE = GETDATE() 
DECLARE @LastDateofMonth DATE 

SELECT @LastDateofMonth = DATEADD(dd, - 1, CONVERT(VARCHAR(8), DATEADD(mm, 1, @Date), 121) + '01') 

SELECT DATEDIFF(dd, @Date, @LastDateofMonth) 
0
DECLARE @MyDATE as datetime; 


SELECT @MYDATE = '19960423'; 

--wind back to first of month 
--add on one month 
--now calculate days from original date, this is always '1 to high' so subtract 1 

SELECT 
    DATEDIFF(day, @mydate, DATEADD(month, 1,D ATEADD(day, 1 - DAY(@MYDATE), @MYDATE))) - 1; 
0

Sie können diesen Wert verwenden, um den Unterschied ab heute zu berechnen.

oder dies das Datum von einem param

SELECT DATEDIFF(day,@date ,EOMONTH(GETDATE())) 
0

Mit SQL 2012 der neuen Funktion EOMONTH zu berechnen() Sie könnten versuchen:

DECLARE @Date date = '2017-08-08' 
select datediff (dd, @Date, EOMONTH(@Date)) as DaysRemaining 
Verwandte Themen