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.