usuario - obtener ultimo registro por fecha sql
¿Cómo obtener la primera y la última fecha del año actual? (15)
--- Lalmuni Demos ---
create table Users
(
userid int,date_of_birth date
)
--- insertar valores ---
insert into Users values(4,''9/10/1991'')
select DATEDIFF(year,date_of_birth, getdate()) - (CASE WHEN (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()),date_of_birth)) > getdate() THEN 1 ELSE 0 END) as Years,
MONTH(getdate() - (DATEADD(year, DATEDIFF(year, date_of_birth, getdate()), date_of_birth))) - 1 as Months,
DAY(getdate() - (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()), date_of_birth))) - 1 as Days,
from users
Usando SQL Server 2000, ¿cómo puedo obtener la primera y la última fecha del año actual?
Rendimiento esperado:
01/01/2012
y 31/12/2012
Cada año tiene la 1ª como primera fecha y 31 como la última fecha. Lo único que debe hacer es adjuntar el año a ese día y mes, por ejemplo:
SELECT ''01/01/''+cast(year(getdate()) as varchar(4)) as [First Day],
''12/31/''+cast(year(getdate()) as varchar(4)) as [Last Day]
En Microsoft SQL Server (T-SQL) esto se puede hacer de la siguiente manera
--beginning of year
select ''01/01/'' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))
--end of year
select ''12/31/'' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))
CURRENT_TIMESTAMP - devuelve la fecha del servidor sql en el momento de la ejecución de la consulta.
AÑO : obtiene el año como parte de la marca de hora actual.
STR , LTRIM : estas dos funciones se aplican para que podamos convertir esto en un varchar que puede ser concatenado con nuestro prefijo deseado (en este caso, es la primera fecha del año o la última del año). Por alguna razón, el resultado generado por la función AÑO tiene espacios de prefijo. Para solucionarlos usamos la función LTRIM que se deja recortada.
Mira este:
select convert(varchar(12),(DateAdd(month,(Month(getdate())-1) * -1, DateAdd(Day,(Day(getdate())-1) * -1,getdate()))),103) as StartYear,
convert(varchar(12),DateAdd(month,12 - Month(getdate()), DateAdd(Day,(31 - Day(getdate())),getdate())),103) as EndYear
Otra forma: (desde SQL Server 2012)
SELECT
DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay,
DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay
Para la fecha de inicio del año actual:
SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())
Para la fecha de finalización del año actual:
SELECT DATEADD(DD,-1,DATEADD(YY,DATEDIFF(YY,0,GETDATE())+1,0))
Para obtener el primer y el último día del año, uno puede usar la función CONCAT
. El valor resultante se puede convertir a cualquier tipo.
CONCAT(YEAR(Getdate()),''-01-01'') FirstOfYear,
CONCAT(YEAR(GETDATE()),''-12-31'') LastOfYear
Prueba esto:
DATE_FORMAT(NOW(),''01/01/%Y'')
DATE_FORMAT(NOW(),''31/12/%Y'')
Puede obtener el año actual usando la función DATEPART
, a partir de la fecha actual obtenida usando getUTCDate()
SELECT
''01/01/'' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())),
''31/12/'' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))
simplemente escribe:
select convert (date,DATEADD(YEAR,DATEDIFF(YEAR,0,GETDATE()),0))
fecha de inicio del año.
select convert (date,DATEADD(YEAR, DATEDIFF(YEAR,0,GETDATE()) + 1, -1))
Parece que estás interesado en realizar una operación de todo para un año determinado, si este es realmente el caso, te recomendaría utilizar la función YEAR() siguiente manera:
SELECT * FROM `table` WHERE YEAR(date_column) = ''2012'';
Lo mismo ocurre con DAY() y MONTH() . También están disponibles para las variantes MySQL / MariaDB y se introdujeron en SQL Server 2008 (por lo que no para 2000 específicos).
SELECT
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear
La consulta anterior proporciona un valor de fecha y hora para la medianoche del 31 de diciembre. Esto es aproximadamente 24 horas antes del último momento del año. Si desea incluir el tiempo que podría ocurrir el 31 de diciembre, entonces debe compararlo con el primero del próximo año, con una <
comparación. O puede compararlo con los últimos milisegundos del año actual, pero esto aún deja un espacio si está utilizando algo que no sea DATETIME (como DATETIME2):
SELECT
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS LastDayOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0) AS FirstOfNextYear,
DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0)) AS LastTimeOfYear
Detalles técnicos
Esto funciona calculando el número de años desde 1900 con DATEDIFF(yy, 0, GETDATE())
y luego agregando eso a una fecha de cero = 1 de enero de 1900. Esto se puede cambiar para trabajar para una fecha arbitraria reemplazando el GETDATE()
o un año arbitrario al reemplazar la función DATEDIFF(...)
por "Year - 1900."
SELECT
DATEADD(yy, DATEDIFF(yy, 0, ''20150301''), 0) AS StartOfYearForMarch2015,
DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015
SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())
print Cast(''1/1/'' + cast(datepart(yyyy, getdate()) as nvarchar(4)) as date)
select to_date(substr(sysdate,1, 4) || ''01/01''), to_date(substr(sysdate,1, 4) || ''12/31'')
from dual