Convierta una fecha y hora de SQL Server a un formato de fecha más corto


82

Tengo una datetimecolumna en SQL Server que me proporciona datos como este 10/27/2010 12:57:49 pmy quiero consultar esta columna, pero solo que SQL Server devuelva el día, mes y año, por ejemplo. 2010 10 27o algo así.

¿Cuáles son las funciones que debería investigar?

¿Debería intentar convertir a otro tipo de datos de fecha? ¿O simplemente convertirlo en una cadena?


2
Eche un vistazo a este artículo: msdn.microsoft.com/en-us/library/ms187928.aspx Específicamente> Estilos de fecha y hora
— Brissles

6
¿Qué versión de SQL Server? SQL Server 2008 introdujo una gran cantidad de nuevos tipos de datos relacionados con la fecha y la hora, por ejemplo, por DATElo que si está en 2008, puede usar SELECT CAST(YourDateTimeColumn AS DATE)y obtiene solo la fecha, sin parte de la hora.
— marc_s


Respuestas:


121

Eche un vistazo a CONVERT . El tercer parámetro es el estilo de fecha y hora al que desea convertir.

p.ej

SELECT CONVERT(VARCHAR(10), GETDATE(), 103) -- dd/MM/yyyy format

12
Parece que 106 es "dd mon aa" y "dd / MM / aaaa" es 103
— nahab

3
@nahab Tienes razón. Además, tuve que usar varchar (11) en lugar de varchar (10) para evitar que se acortara el año (por ejemplo, vi 195 en lugar de 1953)
— Henrov

6
Además, puede usar 101 si desea que los resultados
— tengan

57

Prueba esto:

print cast(getdate() as date )


5
Me gusta más esta opción que la respuesta aceptada. Deja la columna en formato de fecha para que mi 'orden por' funcione correctamente en lugar de solo un varchar.
— Milne

2
Esto no funciona en SQL Server 2005 y versiones anteriores. El tipo de datos DATE se introdujo con SQL 2008.
— JerryOL

Como se indicó anteriormente, es realmente bueno obtener un tipo de datos de fecha, pero cuando se espera un formato específico (como "dd MM aaaa"), se necesita más.
— trincot

15

Si necesita el resultado en un formato de fecha, puede usar:

Select Convert(DateTime, Convert(VarChar, GetDate(), 101))

10

Además de CAST y CONVERT, si está utilizando Sql Server 2008, puede convertir a un tipo de fecha (o usar ese tipo para comenzar) y luego, opcionalmente, convertir nuevamente a un varchar:

declare @myDate date
set @myDate = getdate()
print cast(@myDate as varchar(10))

salida:

2012-01-17

6

Con SQL Server 2005, usaría esto:

select replace(convert(char(10),getdate(),102),'.',' ')

Resultados: 2015 03 05


5

Si tiene un campo de fecha y hora que da resultados como este 2018-03-30 08: 43: 28.177

Propuesto: y desea cambiar la fecha y hora hasta la fecha para que aparezca como 2018-03-30

cast(YourDateField as Date)

1
no ha agregado nada nuevo, jabu.hlong ya dio esta respuesta hace 4 años ...
— Pawel Czapski

No se garantiza que la fecha se muestre en el formato de OP. Puede ser aaaa-MM-dd, dd / MM / aaaa, dd / MM / aaaa 00:00:00 o aún algo más.
— trincot

4

El formato de fecha más corto de mm / dd / aa se puede obtener con:

Select Convert(varchar(8),getdate(),1)

0

Simplemente agregue la palabra clave de fecha. Por ejemplo, seleccione la fecha (fecha del pedido), cuente (1) de los pedidos donde fecha del pedido> '2014-10-01' agrupe por fecha (fecha del pedido);

orderdate está en fecha y hora. Esta consulta mostrará los pedidos para esa fecha en lugar de la fecha y hora.

La palabra clave de fecha aplicada en una columna de fecha y hora la cambiará a fecha corta.


0

Para cualquier versión de SQL Server: dateadd (dd, dateiff (dd, 0, getdate ()), 0)


No se garantiza que la fecha se muestre en el formato de OP. Puede ser aaaa-MM-dd, dd / MM / aaaa, dd / MM / aaaa 00:00:00 o aún algo más.
— trincot

0

El campo DateTime original: [_Date_Time]

El convertido a Shortdate: 'Short_Date'

CONVERT(date, [_Date_Time]) AS 'Short_Date'

Esto devuelve un tipo de datos de fecha que se dejará a la interfaz para representar como una cadena, por lo que bien puede producir "27/12/2018 00:00:00". Eso no es lo que pidió el OP.
— trincot

Esto es lo que pretendía conseguir: dd / MM / aaaa; y esto es lo que mi respuesta produce 2018-11-20
— Yousef Albakoush

Bueno, en primer lugar, 2018-11-20 no es dd / MM / aaaa sino aaaa-MM-dd. Pero la representación depende realmente del sistema (y la configuración regional). En mi sistema también produce horas, minutos y segundos (todos cero). Esto se debe a que no le dijo a SQL cómo debe representarse la fecha como una cadena, y el OP necesita un formato de cadena exacto.
— trincot

En primer lugar, 2018-11-20 se debe a que mi PC está configurada para el uso del idioma árabe; En segundo lugar, lo intentaré después de cambiar la fecha corta en mi PC
— Yousef Albakoush
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.