簡體   English   中英

SQL:一個月內的總天數

[英]SQL: Total days in a month

我有以下公式:

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

我有下表:

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

我想在一年中選擇一個數據,只使用一個參數,即Year
如何將公式應用於查詢?

結果應該是:

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.   

您可以像這樣獲得給定日期的天數:

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

和查詢:

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

此表達式將為您提供該date所在月份的天數,無論它是在哪一天:

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

檢查這個答案。 您可以使用SQL的EOMONTH AND DAY函數來獲取一個月內的天數。

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

你也可以檢查一下。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM