¿Cómo obtener la primera y la última fecha del año actual?

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

 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 

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

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] 

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 

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 
 select to_date(substr(sysdate,1, 4) || '01/01'), to_date(substr(sysdate,1, 4) || '12/31') from dual 
 SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE()) 
 print Cast('1/1/' + cast(datepart(yyyy, getdate()) as nvarchar(4)) as date) 

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 AÑO () de la siguiente manera:

 SELECT * FROM `table` WHERE YEAR(date_column) = '2012'; 

Lo mismo ocurre con DÍA () y MES () . 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).

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.

Otra forma: (desde SQL Server 2012)

 SELECT DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay, DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay 

Prueba esto:

 DATE_FORMAT(NOW(),'01/01/%Y') DATE_FORMAT(NOW(),'31/12/%Y') 

— 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