una ultimo ultima primer obtener mes fecha eomonth calcular año sql sql-server date

ultimo - obtener primer dia de una fecha sql



Calcule el último día del trimestre (6)

¿Cuál es la forma más eficiente de calcular el último día del trimestre anterior?

Ejemplo: dada la fecha 19/11/2008, quiero regresar el 30/09/2008.

La plataforma es SQL Server


Se me ocurrió esto (probado durante todos los meses):

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))

Puede ser el más simple.


Obtener la fecha actual

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

Obtenga la primera fecha del trimestre para la fecha actual

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

Obtenga la última fecha del trimestre para la fecha actual

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

Obtenga la primera fecha del próximo trimestre para la fecha actual

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

Obtenga la última fecha del próximo trimestre para la fecha actual

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


En amazonas corrimiento al rojo:

Último día del trimestre anterior:

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

Último día del trimestre actual:

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


Si @Date tiene la fecha en cuestión

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

EDITAR: Gracias a @strEagle a continuación, aún más simple es:

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


En realidad es más simple:

SELECT DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), -1)


convert(varchar, dateadd(dd,-1,dateadd(qq,1,DATEADD(qq, DATEDIFF(qq,0,YOUR_DATE), 0))),112)

también puede cambiar 112 base en esta lista a continuación

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