[英]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.