Respuestas:
SELECT
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear
La consulta anterior da un valor de fecha y hora para la medianoche al comienzo 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, debe compararlo con el primero del próximo año, con una <
comparación. O puede comparar con los últimos milisegundos del año actual, pero esto todavía deja un espacio si está usando 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 agregándolo a una fecha de cero = 1 de enero de 1900. Esto se puede cambiar para que funcione para una fecha arbitraria reemplazando la GETDATE()
parte o un año arbitrario reemplazando la DATEDIFF(...)
función con "Año - 1900".
SELECT
DATEADD(yy, DATEDIFF(yy, 0, '20150301'), 0) AS StartOfYearForMarch2015,
DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015
He aquí una forma bastante sencilla;
SELECT DATEFROMPARTS(YEAR(GETDATE()), 1, 1) AS 'First Day of Current Year';
SELECT DATEFROMPARTS(YEAR(GETDATE()), 12, 31) AS 'End of Current Year';
No es sexy, pero funciona.
Puede obtener el año actual usando la DATEPART
función, a partir de la fecha actual obtenida usandogetUTCDate()
SELECT
'01/01/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())),
'31/12/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))
DATETIME
lugar de una cadena y, obviamente, eso puede no coincidir con el resultado esperado según la pregunta.
yyyyMMdd
es inequívoco.
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 el 1 como la primera fecha y el 31 como la última fecha, lo que debe hacer es solo 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 obtener el primer y último día del año, se puede utilizar la CONCAT
función. El valor resultante se puede convertir a cualquier tipo.
CONCAT(YEAR(Getdate()),'-01-01') FirstOfYear,
CONCAT(YEAR(GETDATE()),'-12-31') LastOfYear
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))
Otra forma: (desde SQL Server 2012)
SELECT
DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay,
DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay
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 DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())
print Cast('1/1/' + cast(datepart(yyyy, getdate()) as nvarchar(4)) as date)
Parece que está interesado en realizar una operación todo para un año determinado, si este es el caso, recomendaría usar la función YEAR () de esta manera:
SELECT * FROM `table` WHERE YEAR(date_column) = '2012';
Lo mismo ocurre con DAY () y MONTH () . También están disponibles para las variantes de MySQL / MariaDB y se introdujeron en SQL Server 2008 (por lo que no para el 2000 específico).
select to_date(substr(sysdate,1, 4) || '01/01'), to_date(substr(sysdate,1, 4) || '12/31')
from dual
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)))
FECHA Y HORA ACTUAL : devuelve la fecha del servidor SQL en el momento de la ejecución de la consulta.
AÑO : obtiene la parte del año de la marca de tiempo actual.
STR , LTRIM : estas dos funciones se aplican para que podamos convertir esto en un varchar que se pueda concatinar con nuestro prefijo deseado (en este caso, es la primera fecha del año o la última fecha del año). Por alguna razón, el resultado generado por la función YEAR tiene espacios de prefijo. Para solucionarlos usamos la función LTRIM que se deja recortar.
Si llega al 1 de enero, es posible que aún sea la fecha del último año.
select
convert(date, DATEADD(yy, DATEDIFF(yy, 0, DATEadd(day, -1,getdate())), 0), 103 ) AS StartOfYear,
convert(date, DATEADD(yy, DATEDIFF(yy, 0, DATEDIFF(day, -1,getdate()))+1, -1), 103 )AS EndOfYear
Prueba esto:
DATE_FORMAT(NOW(),'01/01/%Y')
DATE_FORMAT(NOW(),'31/12/%Y')
Msg 195, Level 15, State 10, Line 1 'NOW' is not a recognized function name.
--- Demos de Lalmuni ---
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