sql-server - una - obtener hora sql server
Obtenga solo la parte Fecha de DateTime en mssql (5)
Posible duplicado:
Obtenga solo la fecha de la agrupación en seleccionar de la columna DateTime en SQL Server
¿Cómo puedo obtener solo la parte de fecha de un DateTime? Estoy buscando algo así como la función year () pero para toda la fecha.
Esto puede no ser tan ingenioso como un trazador de líneas, pero lo uso para realizar la manipulación de fechas principalmente para los informes:
DECLARE @Date datetime
SET @Date = GETDATE()
-- Set all time components to zero
SET @Date = DATEADD(ms, -DATEPART(ms, @Date), @Date) -- milliseconds = 0
SET @Date = DATEADD(ss, -DATEPART(ss, @Date), @Date) -- seconds = 0
SET @Date = DATEADD(mi, -DATEPART(mi, @Date), @Date) -- minutes = 0
SET @Date = DATEADD(hh, -DATEPART(hh, @Date), @Date) -- hours = 0
-- Extra manipulation for month and year
SET @Date = DATEADD(dd, -DATEPART(dd, @Date) + 1, @Date) -- day = 1
SET @Date = DATEADD(mm, -DATEPART(mm, @Date) + 1, @Date) -- month = 1
Utilizo esto para obtener fechas por hora, diarias, mensuales y anuales usadas para informes y indicadores de rendimiento, etc.
Podemos usar este método:
CONVERT(VARCHAR(10), GETDATE(), 120)
El último parámetro cambia el formato solo para obtener la hora o la fecha en formatos específicos.
Otra forma ingeniosa es:
DATEADD(dd, 0, DATEDIFF(dd, 0, [YourDate]))
Que obtiene el número de días desde el DÍA 0 hasta SuFecha y lo agrega al DÍA 0 para establecer nuevamente la línea base. Este método (o "derivados" del mismo) se puede usar para muchos otros tipos de manipulación de fechas.
Editar - otros cálculos de fecha:
Primer día del mes:
DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0)
Primer día del año:
DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0)
Primer día del trimestre:
DATEADD(qq, DATEDIFF(qq, 0, getdate()), 0)
Último día del mes anterior:
DATEADD(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0))
Último día del mes actual:
DATEADD(ms, -3, DATEADD(mm, DATEDIFF(m, 0, getdate()) + 1, 0))
Último día del año actual:
DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, getdate()) + 1, 0))
Primer lunes del mes:
DATEADD(wk, DATEDIFF(wk, 0, DATEADD(dd, 6 - DATEPART(day, getdate()), getdate())), 0)
Editar: Cierto, Joe, no lo agrega al DÍA 0, agrega 0 (días) a la cantidad de días que básicamente lo convierte nuevamente a una fecha y hora.
Esto también puede ayudar:
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 solución que desea es la que se propone aquí:
https://.com/a/542802/50776
Básicamente, haces esto:
cast(floor(cast(@dateVariable as float)) as datetime)
Hay una definición de función en el enlace que le permitirá consolidar la funcionalidad y llamarla a cualquier lugar (en lugar de tener que recordarla) si lo desea.