SQL:一个月内的总天数

SQL:一个月内的总天数,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有以下公式: "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

我有以下公式:

"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

此表达式将给出
日期
所在月份的天数,无论是哪一天:

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

检查这个答案。您可以使用SQL的
EOMONTH
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

对不起,我不明白。你能提供更多的细节,并把你期望的产出分成几行吗?那么,第一行的日期是2014-01-01,一个月的总天数=31?是的,我只是编辑了这个问题。因此,它将计算每个月的总天数。1月=31日。二月=28。三月=31。这取决于一个月有多少天。SQL Server 2008 Day(EOMONTH(Date))中没有
EOMONTH()函数对于SQL Sever 2012或更高版本的用户来说是一个不错的选择。该表达式确实取决于日期是否接近一个长月的末尾-例如,如果
@date
2014-01-31
我们发现一月是28天。