Calculate the last day of the prior quarter

后端 未结 6 1282
别那么骄傲
别那么骄傲 2020-12-10 16:24

What\'s the most efficient way to calculate the last day of the prior quarter?

Example: given the date 11/19/2008, I want to return 9/30/2008.

Platform is S

相关标签:
6条回答
  • 2020-12-10 17:06

    In amazon redshift:

    Last day of the previous quarter:

    select dateadd(day,-1,DATE_TRUNC('qtr', current_date)) from whatever
    

    Last day of current quarter:

    select dateadd(qtr,1,dateadd(day,-1,DATE_TRUNC('qtr', current_date))) from whatever
    
    0 讨论(0)
  • 2020-12-10 17:09

    Get the current date

    SELECT CONVERT(DATE,GETDATE()) [Current Date]
    

    Get the 1st date of the quarter for the current date

    SELECT CONVERT(DATE, DATEADD(QQ, DATEDIFF(QQ, 0, GETDATE())  ,0)) [Current Quarter 1st Date]
    

    Get the last date of the quarter for the current date

    SELECT CONVERT(DATE,DATEADD(d, -1, DATEADD(q, DATEDIFF(q, 0, GETDATE()) +1, 0))) [Current Quarter Last Date]
    

    Get the 1st date of the next quarter for the current date

    SELECT CONVERT(DATE, DATEADD(QQ, DATEDIFF(QQ, 0, GETDATE()) +1 ,0)) [Next Quarter 1st Date]
    

    Get the last date of the next quarter for the current date

    SELECT CONVERT(DATE,DATEADD(d, -1, DATEADD(q, DATEDIFF(q, 0, GETDATE()) +2, 0))) [Next Quarter Last Date]
    
    0 讨论(0)
  • 2020-12-10 17:09

    I came up with this (tested for all months):

    select dateadd(dd,-1,dateadd(qq,datediff(qq,0,'11/19/2008'),0)),
           dateadd(dd,-1,dateadd(qq,datediff(qq,0,'10/19/2008'),0)),
           dateadd(dd,-1,dateadd(qq,datediff(qq,0,'12/19/2008'),0))
    

    It might turn out to be the simplest.

    0 讨论(0)
  • 2020-12-10 17:11

    If @Date has the date in question

    Select DateAdd(day, -1, dateadd(qq, DateDiff(qq, 0, @Date), 0)) 
    

    EDIT: Thanks to @strEagle below, simpler still is:

    Select dateadd(qq, DateDiff(qq, 0, @Date), -1) 
    
    0 讨论(0)
  • 2020-12-10 17:11
    convert(varchar, dateadd(dd,-1,dateadd(qq,1,DATEADD(qq, DATEDIFF(qq,0,YOUR_DATE), 0))),112)
    

    you also can change 112 base on this below list

    SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM (or PM)
                                            -- Oct  2 2008 11:01AM
    SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy - 10/02/2008                  
    SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd – 2008.10.02           
    SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy
    SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy
    SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy
    SELECT convert(varchar, getdate(), 106) -- dd mon yyyy
    SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy
    SELECT convert(varchar, getdate(), 108) --  hh:mm:ss
    SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM)
                                            -- Oct  2 2008 11:02:44:013AM   
    SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy
    SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd
    SELECT convert(varchar, getdate(), 112) -- yyyymmdd
    SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm
                                            --  02 Oct 2008 11:02:07:577     
    SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h)
    SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)
    SELECT convert(varchar, getdate(), 121) --  yyyy-mm-dd hh:mm:ss.mmm
    SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm
                                            --  2008-10-02T10:52:47.513
    -- SQL create different date styles with t-sql string functions
    SELECT replace(convert(varchar, getdate(), 111), '/', ' ') -- yyyy mm dd
    SELECT convert(varchar(7), getdate(), 126)                 -- yyyy-mm
    SELECT right(convert(varchar, getdate(), 106), 8)          -- mon yyyy
    
    0 讨论(0)
  • 2020-12-10 17:21

    Actually simpler is:

    SELECT DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), -1)
    
    0 讨论(0)
提交回复
热议问题