从计算中删除月份

时间:2014-10-20 22:57:50

标签: sql sql-server sql-server-2008 date

我有一个查询执行以下操作:

在转换为新软件之前总结客户总数,并在转换为新软件后将其与客户端进行比较。我想做的是从数据中删除转换月份 我有以下专栏:

NewClients, ConversionDate, ComparisonMonths

使用Dateadd我可以使用以下公式:

PriorClients = Sum of New Clients
Between Dateadd(mm, -ComparisonMonths, ConversionDate) and ConversionDAte

AfterClients = Sum of New Clients
Between ConversionDate and DAteadd(mm, ComparisonMonths, ConversionDate)

挑战在于转化日期随着每一行而变化,对比月份也是如此。例如,如果转换日期是2013年12月10日,我想要以下内容:

PriorClients = Sum of New Clients
Between Dateadd(mm, -ComparisonMOnths, 'last day of month prior to conversionDate')
    and 'last day of month prior to conversiondate'

这已被简化以提出问题。

1 个答案:

答案 0 :(得分:1)

Here是关于在MS SQL中舍入日期的优秀文章。在您的情况下,您想要舍入到月份。扩展文章:

declare @dtVariable as datetime;
set @dtVariable = getdate();

select @dtVariable as Original,
       DATEADD(Month, DATEDIFF(Month, 0, @dtVariable), 0) as FirstDayOfMonth,
       DATEADD(DAY, -1, DATEADD( MONTH, 1, DATEADD(Month, DATEDIFF(Month, 0, @dtVariable), 0))) as LastDayOfMonth;

从这里开始,通过添加NOT BETWEEN或简单地将开始和参数调整到正确计算的月份来调整查询以排除月份应该很简单。