week una operaciones obtener nombre mes hora fechas fecha day datepart con año sql-server sql-server-2005

sql-server - operaciones - obtener mes y año de una fecha sql



Obtenga solo la fecha de la agrupación en seleccionar de la columna DateTime en SQL Server (7)

¿Qué tal esto?

select convert(datetime, convert(varchar(10), getdate(), 112))

Necesito agrupar algunos registros basados ​​en una fecha, pero es un campo de fecha y hora y necesito ignorar la parte de tiempo de es y solo agrupar por la parte de fecha - aquí está mi SQL tal como está:

SELECT AutoShipItems.CustomerID,AutoShipItems.NextOrderDate, Customer.FirstName,Customer.LastName, Customer.EmailAddress FROM AutoShipItems INNER JOIN Customer ON AutoShipItems.CustomerID =Customer.CustomerID WHERE (AutoShipItems.NextOrderDate <= GETDATE()) GROUP BY AutoShipItems.CustomerID, AutoShipItems.NextOrderDate, Customer.FirstName, Customer.LastName, Customer.EmailAddress ORDER BY AutoShipItems.NextOrderDate


También puede usar simplemente la antigua función de convertir SQL. El último argumento le permite proporcionar formatos de fecha predefinidos, algunos de los cuales eliminan la hora. Aquí está la consulta revisada.

SELECT AutoShipItems.CustomerID, convert(nvarchar(10), AutoShipItems.NextOrderDate, 110) as NextOrderDate ,Customer.FirstName,Customer.LastName, Customer.EmailAddress FROM AutoShipItems INNER JOIN Customer ON AutoShipItems.CustomerID =Customer.CustomerID WHERE (AutoShipItems.NextOrderDate <= GETDATE()) GROUP BY AutoShipItems.CustomerID, convert(nvarchar(10), AutoShipItems.NextOrderDate, 110) , Customer.FirstName, Customer.LastName, Customer.EmailAddress ORDER BY AutoShipItems.NextOrderDate


Vea este enlace para tres versiones diferentes de una función de solo fecha. Aquí está el que terminé usando:

CREATE FUNCTION [dbo].[fn_GetDateOnly] ( @pInputDate DATETIME ) RETURNS DATETIME BEGIN RETURN CAST(CONVERT(VARCHAR(10), @pInputDate, 111) AS DATETIME) END


Si todo se trata solo de agrupar, también puede convertir la expresión de fecha y hora a int.

Simple CAST(datetime AS int) realmente redondea la fecha y hora a la fecha más cercana en lugar de descartar la parte del tiempo. De allí,

CAST(datetime - 0.5 AS int)

De otra manera:

CAST(CAST(datetime AS float) AS int)

(A diferencia de los tiempos de las fechas, los flotantes se truncan cuando se lanzan a int.)

Prefiero el primero ya que es más corto. Sin embargo, no estoy seguro de cuál es mejor en términos de rendimiento. Aún así, el problema probablemente solo surja en grandes conjuntos de datos.


cast (x as date)

o

year(x) month(x) day(x)


Puede usar la fecha de tipo con convert o convert .

convert(date, @x)

o

cast(@x as date)


Puede agrupar por esto:

cast(floor(cast(AutoShipItems.NextOrderDate as float)) as datetime)

Puse esto en una función escalar definida por el usuario para que sea más fácil:

create function [dbo].[xfn_TrimTimeFromDateTime] ( @date as datetime ) returns datetime with schemabinding as begin --- Convert to a float, and get the integer that represents it. --- And then convert back to datetime. return cast(floor(cast(@date as float)) as datetime) end

Que llamarías así:

GROUP BY AutoShipItems.CustomerID, dbo.xfn_TrimTimeFromDateTime(AutoShipItems.NextOrderDate), Customer.FirstName, Customer.LastName, Customer.EmailAddress

Tenga en cuenta que puede tener que cambiar los valores en la cláusula SELECT, ya que ahora se está agrupando por algo diferente.