valor usuario ultimo ultima seleccionar registro reciente por obtener minima mayor mas fecha con campo actual sql sql-server sql-server-2000

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