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.