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?


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.


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


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.


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.


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) 

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)


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


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)

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())  )

2

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

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


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'

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


0

No PLSQL você pode usar

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

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)

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())

0

Tente isso.

SELECT DATEADD(DD, 0, DATEDIFF(DD, 0, GETDATE()))
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.