为了消除由月份和年份的天数差异(闰年)引起的偏差,从每月的任意数量的总比较中,并假设,例如,一个名为{{1的表格使用名为My_Table
的日期时间列和名为order_date
的整数列,我使用以下查询来获得无偏的月收入总额:
revenue
我想要你的意见或其他做法
答案 0 :(得分:1)
滚动自己的日历计算可能很难。使用内置函数可能更可靠。
例如,您可以找到任何月份的第一天,例如:
DATEADD(mm, DATEDIFF(m,0,DateColumn),0)
在两者之间执行datediff
可以获得该月的天数。多年来你也可以这样做:
select
datediff(d,
DATEADD(mm, DATEDIFF(mm,0,getdate()),0),
DATEADD(mm, DATEDIFF(mm,0,getdate())+1,0))
as NumOfDaysThisMonth,
datediff(d,
DATEADD(yy, DATEDIFF(yy,0,getdate()),0),
DATEADD(yy, DATEDIFF(yy,0,getdate())+1,0))
as NumOfDaysThisYear
此示例适用于SQL Server,希望在Sybase上有一个等效的内容:)
答案 1 :(得分:0)
我假设你使用的是SQL Server,因为这似乎是我所知道的唯一使用datepart()的系统。
在oracle和MySQL中,你有一个LAST_DAY()函数。我找到了与SQL Server here等效的用户定义函数:
CREATE FUNCTION [dbo].[ufn_GetLastDayOfMonth] ( @pInputDate DATETIME )
RETURNS DATETIME
BEGIN
DECLARE @vOutputDate DATETIME
SET @vOutputDate = CAST(YEAR(@pInputDate) AS VARCHAR(4)) + '/' +
CAST(MONTH(@pInputDate) AS VARCHAR(2)) + '/01'
SET @vOutputDate = DATEADD(DD, -1, DATEADD(M, 1, @vOutputDate))
RETURN @vOutputDate
END
GO
您可以添加该功能,然后使用它来简化查询。