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?

Neeraj
fuente
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.

bernd_k
fuente
¿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

Prad9
fuente
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.

RichardTheKiwi
fuente
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.

Anna-leny
fuente
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) 
A.Goutam
fuente
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)

Domcha
fuente
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

Stefan Steiger
fuente
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)
Ram Pratap
fuente
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())  )
RollRoll
fuente
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)

Simon Alphonse
fuente
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'
Arvind Kumar
fuente
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

Naveed Yousaf
fuente
0

En PLSQL puedes usar

to_char(SYSDATE,'dd/mm/yyyy')
Morterox
fuente
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)
usuario4162468
fuente
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())
TMP ByKIS
fuente
0

Prueba esto.

SELECT DATEADD(DD, 0, DATEDIFF(DD, 0, GETDATE()))
Ram Pratap
fuente