Tsql 如何查找给定季度日期的季度末

Tsql 如何查找给定季度日期的季度末,tsql,sql-server-2008,Tsql,Sql Server 2008,如果给我一个日期(比如@d='11-25-2010'),我如何从该日期确定季度末。我想在午夜前一秒使用时间戳 我可以得到这个: select dateadd(qq, datediff(qq, 0, getdate()), 0) as quarterStart 这给了我:“10-1-2010” 我在某一天的午夜前用它一秒钟: select DateAdd(second, -1, DateAdd(day, DateDiff(day, 0, @d))+1, 0) ) AS DayEnd 最后,四分

如果给我一个日期(比如@d='11-25-2010'),我如何从该日期确定季度末。我想在午夜前一秒使用时间戳

我可以得到这个:

select dateadd(qq, datediff(qq, 0, getdate()), 0) as quarterStart
这给了我:“10-1-2010”

我在某一天的午夜前用它一秒钟:

select DateAdd(second, -1, DateAdd(day, DateDiff(day, 0, @d))+1, 0) ) AS DayEnd
最后,四分之一法会给我“12-31-2010 23:59:00”

我想我明白了:

select DateAdd(second, -1, DateAdd(qq, DateDiff(qq, 0, getdatE())+1, 0) ) 
我想我明白了:

select DateAdd(second, -1, DateAdd(qq, DateDiff(qq, 0, getdatE())+1, 0) ) 
试试这个

select dateadd(second,-1,
         dateadd(month,3,
           dateadd(qq, datediff( quarter , 0 , current_timestamp ) ,
             0
             )
           )
         )
试试这个

select dateadd(second,-1,
         dateadd(month,3,
           dateadd(qq, datediff( quarter , 0 , current_timestamp ) ,
             0
             )
           )
         )
只需找到下一季度的第一天,减去一天。如果您将此值用于某个范围,则使用“严格小于”,并且不要减去一天:

MyDate >= Dateadd(qq, datediff(qq, 0, getdate()), 0)
And MyDate < DateAdd(qq, 1
                , dateadd(qq, datediff(qq, 0, getdate()), 0))
MyDate>=Dateadd(qq,datediff(qq,0,getdate()),0)
和MyDate
只需找到下一季度的第一天,减去一天。如果您将此值用于某个范围,则使用“严格小于”,并且不要减去一天:

MyDate >= Dateadd(qq, datediff(qq, 0, getdate()), 0)
And MyDate < DateAdd(qq, 1
                , dateadd(qq, datediff(qq, 0, getdate()), 0))
MyDate>=Dateadd(qq,datediff(qq,0,getdate()),0)
和MyDate
为了清晰起见,非常详细。基本上,这是一种直接方法:

  • 获得年份
  • 考虑到季度中有3个月,计算季度月份
  • 调整第四季度的年度
  • 编译输出
下面是代码:

declare @current datetime
set @current = '9-25-2010'

declare @year int
set @year = datepart(year, @current)

declare @quartermonth int
select @quartermonth = ((datepart(month, @current) - 1)/ 3 + 1)* 3 + 1 -- go to the next month

select @year, @quartermonth

-- adjust year if it's 4th quater
select @year = @year + @quartermonth / 12

-- avoid month overflow
select @quartermonth = @quartermonth % 12

select @year, @quartermonth


declare @firstdayofnextquater datetime
select @firstdayofnextquater = convert(datetime, convert(varchar, @year) + '-' + convert(varchar, @quartermonth) + '-01')

select dateadd(second, -1, @firstdayofnextquater)

为了清楚起见,非常冗长。基本上,这是一种直接方法:

  • 获得年份
  • 考虑到季度中有3个月,计算季度月份
  • 调整第四季度的年度
  • 编译输出
下面是代码:

declare @current datetime
set @current = '9-25-2010'

declare @year int
set @year = datepart(year, @current)

declare @quartermonth int
select @quartermonth = ((datepart(month, @current) - 1)/ 3 + 1)* 3 + 1 -- go to the next month

select @year, @quartermonth

-- adjust year if it's 4th quater
select @year = @year + @quartermonth / 12

-- avoid month overflow
select @quartermonth = @quartermonth % 12

select @year, @quartermonth


declare @firstdayofnextquater datetime
select @firstdayofnextquater = convert(datetime, convert(varchar, @year) + '-' + convert(varchar, @quartermonth) + '-01')

select dateadd(second, -1, @firstdayofnextquater)

这是在这里被问到和回答的:

这是在这里被问到和回答的:

在这个上下文中,什么是季度。例如,当2010年11月25日作为输入时,您希望得到什么输出?请回答:谢谢,@Dave。我确实去了那个链接,但我没有看到第三个解决方案。这就是我要找的!(它总是在你最后看的地方,不是吗?)在这种情况下,四分之一是什么。例如,当2010年11月25日作为输入时,您希望得到什么输出?请回答:谢谢,@Dave。我确实去了那个链接,但我没有看到第三个解决方案。这就是我要找的!(它总是在你最后看的地方,不是吗?)