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?

kaes
fuente
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
AdaTheDev
fuente
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 )

jabu.hlong
fuente
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))
Israel Margulies
fuente
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
CD Jorgensen
fuente
6

Con SQL Server 2005, usaría esto:

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

Resultados: 2015 03 05

Un invitado
fuente
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)
BIReportGuy
fuente
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)
bsivel
fuente
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.

Anuj Kaul
fuente
0

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

Andrey
fuente
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'
Yousef Albakoush
fuente
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