2015-05-13 6 views
6

Ho la seguente formula:SQL: giorni Totale in un mese

"Value1" * 100 * "Total day in a month" * "Value2" 

Ho la seguente tabella:

ID  Date  Time  Value1  Value2 
1  2014-01-01 00:00 10   20 
2  2014-01-01 01:00 20   5 

voglio selezionare un dato in un anno con solo con un parametro che è Year.
Come posso applicare la formula in una query?

Il risultato dovrebbe essere:

ID  Date  Time  Value1  Value2 TotalDayinMonth Result 
1  2014-01-01 00:00 10   20  31    620000 
2  2014-01-01 01:00 20   5  31    310000 
ff. 
+0

Scusa se non capisco. Puoi fornire maggiori dettagli e lavorare su un paio di righe di quale output ti aspetti? –

+0

Quindi sulla riga 1 con una data del 01-01-2014, giorno totale in un mese = 31? –

+0

Sì, ho appena modificare la domanda. Quindi calcolerà il giorno totale in ogni mese. Gen = 31. Feb = 28. Mar = 31. Dipende da quanti giorni in un mese. – Haminteu

risposta

4

è possibile ottenere il numero di giorni di un dato data così:

DECLARE @date DATETIME = '2014-01-01' 
SELECT DATEDIFF(DAY, @date, DATEADD(MONTH, 1, @date)) 

e la query:

SELECT ID 
     ,[Date] 
     ,[Time] 
     ,Value1 
     ,Value2 
     ,DATEDIFF(DAY, [Date], DATEADD(MONTH, 1, [Date])) AS TotalDayinMonth 
     ,Value1 * 100 * DATEDIFF(DAY, [Date], DATEADD(MONTH, 1, [Date])) * Value2 AS Result 
FROM yourTable 
+1

Questa espressione dipende dalla data che non è verso la fine di un lungo mese - ad es. se '@ date' è' 2014-01-31' scopriamo che gennaio dura 28 giorni. –

1

Questa espressione ti darà il numero di giorni nel mese in cui lo date è in qualsiasi giorno:

datediff(day, 
    dateadd(month,datediff(month, 0, date),0), 
    dateadd(month,datediff(month, 0, date)+1,0)) 
1

Verificare questa risposta. È possibile utilizzare la funzione EOMONTH AND DAY di SQL per ottenere il numero di giorni in un mese.

SELECT ID 
     ,[Date] 
     ,[Time] 
     ,Value1 
     ,Value2 
     ,DAY(EOMONTH(Date)) AS TotalDaysInMonth 
     ,Value1 * 100 * DAY(EOMONTH(Date)) * Value2 AS Result 
FROM TABLENAME 
+2

Nessuna funzione 'EOMONTH()' in SQL Server 2008 – sqluser

+0

DAY (EOMONTH (Data)) è una buona opzione per quelli su SQL Sever 2012 o versioni successive – Jeff

0

è possibile controllare anche questo.

declare @t table (ID int, Date date, Time time, Value1 int, Value2 int) 

insert into @t values (1,'2014-01-01','00:00',10,20) , (2,'2014-01-01','00:00',20,5), (3,'2014-02-01','00:00',20,5) 

select * from @t 

; with cte as 
(
    select id, 
     day(DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,DATE)+1,0))) Totaldayofmonth  
    from @t 
) 
--select * from cte 
select 
    *, Value1 * 100 * Totaldayofmonth * Value2 
from 
    @t t inner join cte on cte.ID = t.id