Como selecionar data sem hora no SQL

257

Quando seleciono a data no SQL, ela é retornada como 2011-02-25 21:17:33.933. Mas eu preciso apenas da parte Data, é isso 2011-02-25. Como posso fazer isso?

Neeraj
fonte
4
Eu acho que ele quer uma string e, portanto, não é duplicada
Bernd_k
@TylerH existe alguma maneira de obter 2011-02-25 00: 00: 00.000 em vez da hora atual?
Thrainder 12/01

Respostas:

148

Eu acho que ele quer uma corda.

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

120 aqui conta a função de conversão que passamos a data de entrada no seguinte formato : yyyy-mm-dd hh:mi:ss.

bernd_k
fonte
O que é 120?
Павле
@ Consulte o artigo Estilos de data e hora
Fox Vĩnh Tâm
Eu usei esse select convert (varchar (10), APPROVED_DATE, 120), recebi a coluna de erro APPROVED_DATE datetime, como vou convertê-lo? erro O identificador de várias partes "LAB_RESULTS.APPROVED_DATE" não pôde ser vinculado.
Abdullah
530

Para o SQL Server 2008:

Convert(date, getdate())  

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

Prad9
fonte
6
Recebo "Data do tipo não é um tipo de sistema definido".
SeaDrive
10
DATEé novo em 2008.
Tim Schmelter
33
não tenho ideia de por que essa é uma resposta tão votada. esta pergunta é para o SQL Server 2005, NÃO 2008. 2005 não possui o datetipo de dados, portanto, esta solução é inválida.
21414 Joshua Burns
84
É votado porque as pessoas procuram soluções para seus problemas, não os autores. Então, se 110 pessoas acharam que isso funcionou para eles, acho justo que tenham 110 votos positivos.
James
Eu tenho o mesmo erro quando eu uso select converter (table.order_date, getdate ()); sql server versão 2017, o erro (data do tipo não é um tipo de sistema definido) o tipo de coluna datetime
Abdullah
57

O mais rápido é datediff, por exemplo

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

Mas se você só precisar usar o valor, poderá pular os dados, por exemplo

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

onde a expressão datediff(d, 0, getdate())é suficiente para retornar a data de hoje sem parte do tempo.

RichardTheKiwi
fonte
Oldie but goodie, usou esse truque dezenas de vezes nos DBs mais antigos de 2000/2005.
25717 KeithS
43

Use CAST (GETDATE () como data) que funcionou para mim, simples.

Anna-leny
fonte
onde vou adicionar o nome da minha coluna? selecionar elenco (getdate () como data, order_date)?
Abdullah
@AbdullahCAST(order_date AS DATE)
Andrew Morton
12

você pode usar assim

SELECT Convert(varchar(10), GETDATE(),120) 
A.Goutam
fonte
onde colocarei a data do pedido do nome da minha coluna?
Abdullah
10

Para a versão 2008 mais antiga :

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

Domcha
fonte
aplausos para isso! As outras soluções dependem apenas da parte varchar (10), que apenas trunca o valor.
Gonza Oviedo
2

É um pouco tarde, mas use a função ODBC "curdate" (colchetes angulares 'fn' é a sequência de escape da função ODBC).

SELECT {fn curdate()} 

Resultado: 2013-02-01

Stefan Steiger
fonte
4
Sinceramente, estou curioso sobre como você acha que sua resposta é melhor do que a resposta aceita. Ou onde você talvez esteja se referindo às outras respostas?
Mikael Eriksson
1
@Mikael Eriksson: Hmm, porque as Funções ODBC são funções canônicas e, portanto, indexáveis, diferentemente das funções não determinísticas do SQL-Server. Mas nunca mente, é apenas uma questão de escala quando se desloca de suas 3 entradas em testes para os 1 * 10E6 entradas em produção, você começa sem problemas durante o desenvolvimento;)
Stefan Steiger
8
Se você executar essa consulta SELECT {fn curdate()} FROM (SELECT 1) AS T(X)e examinar o plano de execução real (versão xml), verá que o que é realmente executado é CONVERT(varchar(10),getdate(),23). Portanto, o tipo de dados dessa função ODBC é o varchar(10)que significa que, se você quiser comparar o resultado com um datetime, obterá uma conversão implícita de varchar(10)para datetimeem uma sequência de caracteres yyyy-mm-dd. Essa conversão implícita falhará set dateformat dmy.
Mikael Eriksson
1
@Mikael Eriksson: Parece um bug, eles deveriam usar SELECT CONVERT (char (8), GETDATE (), 112).
Stefan Steiger
"funções canônicas e, portanto, indexáveis, diferentemente das funções não-determinísticas do SQL-Server" - er, o que?
Martin Smith
2

Você pode tentar este também.

SELECT CONVERT(DATE, GETDATE(), 120)
Ram Pratap
fonte
2

Converta-o novamente em datetime após a conversão em date para manter o mesmo datatime, se necessário

select Convert(datetime, Convert(date, getdate())  )
RollRoll
fonte
2

Caso você precise de um tempo para zeros, como 2018-01-17 00:00:00.000:

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

Simon Alphonse
fonte
Obrigado, era isso que eu estava procurando.
Pratik Ghag 20/09/19
1

O uso é simples:

convert(date, Btch_Time)

Exemplo abaixo:

Tabela:

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
fonte
1

É tarde demais, mas seguir funcionou bem para mim

declare @vCurrentDate date=getutcdate()

select @vCurrentDate

Quando o tipo de dados é data, as horas seriam truncadas

Naveed Yousaf
fonte
0

No PLSQL você pode usar

to_char(SYSDATE,'dd/mm/yyyy')
Morterox
fonte
considere transferir isso para um comentário.
Xlembouras
Esta pergunta é sobre SQL Server ... não a Oracle
Ben
0

Primeiro Converta a data em flutuante (que exibe o numérico), depois ROUNDo numérico em 0 casas decimais, depois converta-o em data e hora.

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

Se você deseja retornar um tipo de data como apenas uma data, use

CONVERT(date, SYSDATETIME())

ou

SELECT CONVERT(date,SYSDATETIME()) 

ou

DECLARE @DateOnly Datetime
SET @DateOnly=CONVERT(date,SYSDATETIME())
TMP ByKIS
fonte
0

Tente isso.

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