¿Cuál es la forma más eficiente de calcular el último día del trimestre anterior?Calcule el último día del trimestre
Ejemplo: dada la fecha 19/11/2008, quiero devolver el 30/09/2008.
Plataforma es SQL Server
¿Cuál es la forma más eficiente de calcular el último día del trimestre anterior?Calcule el último día del trimestre
Ejemplo: dada la fecha 19/11/2008, quiero devolver el 30/09/2008.
Plataforma es SQL Server
Si @Date tiene la fecha en cuestión
Select DateAdd(day, -1, dateadd(qq, DateDiff(qq, 0, @Date), 0))
EDIT: Gracias a @strEagle a continuación, todavía más sencillo es:
Select dateadd(qq, DateDiff(qq, 0, @Date), -1)
Estaba pensando en la misma línea, pero no sabía sobre los bits "qq". Hace las cosas mucho más fáciles ... – TToni
me ocurrió con esta (probado para 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))
Se podría llegar a ser la más simple.
En realidad es más simple:
SELECT DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), -1)
Obtenga la fecha actual
SELECT CONVERT(DATE,GETDATE()) [Current Date]
Consigue la primera fecha de la cuarta parte de la fecha actual
SELECT CONVERT(DATE, DATEADD(QQ, DATEDIFF(QQ, 0, GETDATE()) ,0)) [Current Quarter 1st Date]
Obtener 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]
Obtener el primero fecha del próximo trimestre para la fecha actual
SELECT CONVERT(DATE, DATEADD(QQ, DATEDIFF(QQ, 0, GETDATE()) +1 ,0)) [Next Quarter 1st Date]
conseguir 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]
Creo que sería genial si puedes explicar lo que has hecho. Entonces, más personas podrán entender lo que propusiste. – jazzurro
En corrimiento al rojo Amazon:
Ú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
La plataforma es SQL Server. 'DATE_TRUNC' no es compatible. – strickt01
convert(varchar, dateadd(dd,-1,dateadd(qq,1,DATEADD(qq, DATEDIFF(qq,0,YOUR_DATE), 0))),112)
también puede cambiar de base 112 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
La pregunta no es acerca de la conversión a VARCHAR de ninguna manera, solo obtener una fecha que sea el final del trimestre. –
yaya, lo sé, pero creo que tendrá a alguien igual conmigo. También solo quieren obtener la última fecha de un trimestre con el formato aaaammdd. Gracias –
¿Cuál es el resultado deseado para '9/30/2008'? '30/06/2008'? – TToni
sí, y para capturar todos los límites: 10/1/2008 debería ser 9/30/2008 –