Cómo seleccionar fecha sin hora en SQL


257

Cuando selecciono la fecha en SQL, se devuelve como 2011-02-25 21:17:33.933. Pero solo necesito la parte Fecha, es decir 2011-02-25. ¿Cómo puedo hacer esto?


44
Supongo que quiere una cadena y, por lo tanto, no está duplicada
bernd_k


@TylerH ¿hay alguna manera de obtener 2011-02-25 00: 00: 00.000 en lugar de la hora actual?
Thrainder

Respuestas:


148

Supongo que quiere una cuerda.

select convert(varchar(10), '2011-02-25 21:17:33.933', 120)

120 dice aquí la función de conversión que se pasa la fecha de entrada en el siguiente formato : yyyy-mm-dd hh:mi:ss.


¿Para qué es 120?
Павле

@ Por favor, consulte este artículo Estilos de fecha y hora
Fox Vĩnh Tâm

utilicé esta conversión selecta (varchar (10), APPROVED_DATE, 120), obtuve la columna de error APPROVED_DATE datetime, ¿cómo la convertiré? error El identificador de varias partes "LAB_RESULTS.APPROVED_DATE" no se pudo vincular.
Abdullah

530

Para SQL Server 2008:

Convert(date, getdate())  

Consulte https://docs.microsoft.com/en-us/sql/t-sql/functions/getdate-transact-sql


66
Me aparece "La fecha de tipo no es un tipo de sistema definido".
SeaDrive

10
DATEes nuevo en 2008.
Tim Schmelter

33
No tengo idea de por qué esta es una respuesta tan votada. esta pregunta es para SQL Server 2005, NO 2008. 2005 no tiene el datetipo de datos, por lo que esta solución no es válida.
Joshua Burns

84
Se votó porque la gente busca soluciones a su problema, no los autores. Entonces, si 110 personas encontraron que esto les funcionó, creo que es justo que tenga 110 votos a favor.
James

Tengo el mismo error cuando uso select convert (table.order_date, getdate ()); sql server versión 2017, el error (la fecha de tipo no es un tipo de sistema definido) el tipo de columna datetime
Abdullah

57

El más rápido es datediff, p. Ej.

select dateadd(d, datediff(d,0, [datecolumn]), 0), other..
from tbl

Pero si solo necesita usar el valor, puede omitir el dateadd, por ejemplo

select ...
WHERE somedate <= datediff(d, 0, getdate())

donde la expresión datediff(d, 0, getdate())es suficiente para devolver la fecha de hoy sin porción de tiempo.


Oldie pero goodie, usó este truco docenas de veces en anteriores DB 2000/2005.
KeithS

43

Use CAST (GETDATE () como fecha) que funcionó para mí, simple.


donde agregaré el nombre de mi columna? seleccione cast (getdate () como date, order_date)?
Abdullah

@AbdullahCAST(order_date AS DATE)
Andrew Morton


12

puedes usar así

SELECT Convert(varchar(10), GETDATE(),120) 

donde pondré la fecha de pedido de mi columna?
Abdullah

10

Para la versión anterior de 2008 :

SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)


aplausos por esto! Las otras soluciones solo se basan en la parte varchar (10), que simplemente trunca el valor.
Gonza Oviedo

2

Es un poco tarde, pero use la función ODBC "curdate" (el ángulo de paréntesis 'fn' es la secuencia de escape de la función ODBC).

SELECT {fn curdate()} 

Salida: 2013-02-01


44
Sinceramente, tengo curiosidad sobre cómo crees que tu respuesta es mejor que la respuesta aceptada. ¿O tal vez te refieres a las otras respuestas?
Mikael Eriksson

1
@Mikael Eriksson: Hmm, porque las funciones ODBC son funciones canónicas y, por lo tanto, indexables, a diferencia de las funciones no deterministas de SQL Server. Pero no importa, es solo un problema de escalado cuando pasas de tus 3 entradas en pruebas a las entradas 1 * 10E6 en producción, no tienes problemas durante el desarrollo;)
Stefan Steiger

8
Si ejecuta esta consulta SELECT {fn curdate()} FROM (SELECT 1) AS T(X)y observa el plan de ejecución real (versión xml), verá que lo que realmente se ejecuta es CONVERT(varchar(10),getdate(),23). Entonces, el tipo de datos de esta función ODBC es lo varchar(10)que significa que si desea comparar el resultado con un datetimeobtendrá una conversión implícita de varchar(10)a datetimeen una cadena yyyy-mm-dd. Esa conversión implícita fallará con set dateformat dmy.
Mikael Eriksson

1
@Mikael Eriksson: Parece un error, deberían usar SELECT CONVERT (char (8), GETDATE (), 112) en su lugar.
Stefan Steiger

"funciones canónicas y, por lo tanto, indexables, a diferencia de las funciones no deterministas de SQL Server", ¿qué?
Martin Smith

2

Puedes probar este también.

SELECT CONVERT(DATE, GETDATE(), 120)

2

Convierta de nuevo a fecha y hora después de convertir a fecha para mantener la misma hora de datos si es necesario

select Convert(datetime, Convert(date, getdate())  )

2

En caso de que necesite tiempo para ser ceros como 2018-01-17 00:00:00.000:

SELECT CONVERT(DATETIME, CONVERT(DATE, GETDATE()), 121)


Gracias, esto era lo que estaba buscando.
Pratik Ghag

1

El uso es simple:

convert(date, Btch_Time)

Ejemplo a continuación:

Mesa:

Efft_d       Loan_I  Loan_Purp_Type_C   Orig_LTV    Curr_LTV    Schd_LTV    Un_drwn_Bal_a      Btch_Time            Strm_I  Btch_Ins_I
2014-05-31  200312500   HL03             NULL         1.0000    1.0000         1.0000      2014-06-17 11:10:57.330  1005    24851e0a-53983699-14b4-69109


Select * from helios.dbo.CBA_SRD_Loan where Loan_I in ('200312500') and convert(date, Btch_Time) = '2014-06-17'

1

Es demasiado tarde pero seguir me funcionó bien

declare @vCurrentDate date=getutcdate()

select @vCurrentDate

Cuando el tipo de datos es fecha, las horas se truncarían


0

En PLSQL puedes usar

to_char(SYSDATE,'dd/mm/yyyy')

considere transferir esto a un comentario.
xlembouras

Esta pregunta es sobre SQL Server ... no Oracle
Ben

0

Primero ROUNDconvierta la fecha a flotante (que muestra el numérico), luego el numérico a 0 puntos decimales, luego conviértalo a datetime.

convert(datetime,round(convert(float,orderdate,101),0) ,101)

0

Si desea devolver un tipo de fecha como solo una fecha, use

CONVERT(date, SYSDATETIME())

o

SELECT CONVERT(date,SYSDATETIME()) 

o

DECLARE @DateOnly Datetime
SET @DateOnly=CONVERT(date,SYSDATETIME())

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.