Come selezionare la data senza ora in SQL


257

Quando seleziono la data in SQL, viene restituita come 2011-02-25 21:17:33.933. Ma ho bisogno solo della parte Data, cioè 2011-02-25. Come posso fare questo?


4
Immagino che voglia una stringa, e quindi non è duplicata
bernd_k,


@TylerH c'è un modo per ottenere 25/02/2011 00: 00: 00.000 anziché l'ora corrente?
Thrainder

Risposte:


148

Immagino che voglia una corda.

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

120 qui dice la funzione di conversione che passiamo la data di ingresso nel seguente formato : yyyy-mm-dd hh:mi:ss.


A cosa serve 120?
Павле

@ Павле riferisci questo articolo Stili di data e ora
Fox Vĩnh Tâm

ho usato questo select convert (varchar (10), APPROVED_DATE, 120), ho ottenuto la colonna di errore APPROVED_DATE datetime, come lo convertirò? errore Impossibile identificare l'identificatore in più parti "LAB_RESULTS.APPROVED_DATE".
Abdullah,

530

Per SQL Server 2008:

Convert(date, getdate())  

Fare riferimento a https://docs.microsoft.com/en-us/sql/t-sql/functions/getdate-transact-sql


6
Ottengo "La data del tipo non è un tipo di sistema definito".
SeaDrive,

10
DATEè nuovo nel 2008.
Tim Schmelter,

33
non ho idea del perché questa sia una risposta così votata. questa domanda è per SQL Server 2005, NON 2008. Il 2005 non ha il datetipo di dati che rende questa soluzione non valida.
Joshua Burns,

84
È stato votato perché le persone cercano soluzioni al loro problema, non autori. Quindi se 110 persone hanno trovato che funzionava per loro, penso che sia giusto che abbia 110 voti positivi.
James,

Ho lo stesso errore quando utilizzo select convert (table.order_date, getdate ()); sql server versione 2017, l'errore (Tipo data non è un tipo di sistema definito) il tipo di colonna datetime
Abdullah

57

Il più veloce è datediff, ad es

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

Ma se hai solo bisogno di usare il valore, puoi saltare il dateadd, ad es

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

dove l'espressione datediff(d, 0, getdate())è sufficiente per restituire la data odierna senza porzione di tempo.


Vecchio ma buono, usato questo trucco dozzine di volte nei vecchi DB 2000/2005.
KeithS,

43

Usa CAST (GETDATE () come data) che ha funzionato per me, semplice.


dove aggiungerò il nome della mia colonna? seleziona cast (getdate () come data, order_date)?
Abdullah,

@AbdullahCAST(order_date AS DATE)
Andrew Morton,


12

puoi usare così

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

dove inserirò la data dell'ordine del mio nome di colonna?
Abdullah,

10

Per la versione precedente del 2008 :

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


applausi per questo! Le altre soluzioni si basano solo sulla parte varchar (10), che tronca il valore.
Gonza Oviedo,

2

È un po 'tardi, ma usa la funzione "curdate" ODBC (le parentesi angolari' fn 'è la sequenza di escape della funzione ODBC).

SELECT {fn curdate()} 

Produzione: 2013-02-01


4
Sono sinceramente curioso di sapere come pensi che la tua risposta sia migliore della risposta accettata. O dove forse ti riferisci alle altre risposte?
Mikael Eriksson,

1
@Mikael Eriksson: Hmm, perché le funzioni ODBC sono funzioni canoniche e quindi indicizzabili, a differenza delle funzioni non deterministiche di SQL Server. Ma non importa, è solo un problema di ridimensionamento quando passi dalle tue 3 voci nei test alle voci 1 * 10E6 in produzione, non ottieni problemi durante lo sviluppo;)
Stefan Steiger

8
Se esegui questa query SELECT {fn curdate()} FROM (SELECT 1) AS T(X)e dai un'occhiata al piano di esecuzione effettivo (versione xml) vedrai che ciò che viene effettivamente eseguito è CONVERT(varchar(10),getdate(),23). Così il tipo di dati di questa funzione ODBC è varchar(10)che significa che se si desidera confrontare il risultato con un datetimesi ottengono una conversione implicita da varchar(10)a datetimesu una stringa yyyy-mm-dd. Quella conversione implicita fallirà set dateformat dmy.
Mikael Eriksson,

1
@Mikael Eriksson: sembra un bug, dovrebbero invece usare SELECT CONVERT (char (8), GETDATE (), 112).
Stefan Steiger,

"funzioni canoniche e quindi indicizzabili, a differenza delle funzioni non deterministiche di SQL Server" - ehm, cosa?
Martin Smith,

2

Puoi provare anche questo.

SELECT CONVERT(DATE, GETDATE(), 120)

2

Convertire nuovamente in datetime dopo la conversione in data al fine di mantenere lo stesso datatime se necessario

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

2

Nel caso in cui sia necessario il tempo per essere zeri come 2018-01-17 00:00:00.000:

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


Grazie, questo era quello che stavo cercando.
Pratik Ghag

1

L'uso è semplice:

convert(date, Btch_Time)

Esempio sotto:

Tavolo:

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

È troppo tardi ma il seguito ha funzionato bene per me

declare @vCurrentDate date=getutcdate()

select @vCurrentDate

Quando il tipo di dati è data, le ore verrebbero troncate


0

In PLSQL puoi usare

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

considera di trasferirlo a un commento.
xlembouras,

Questa domanda riguarda SQL Server ... non Oracle
Ben

0

Prima converti la data in virgola mobile (che mostra il valore numerico), quindi ROUNDil numerico in 0 punti decimali, quindi convertilo in datetime.

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

0

Se si desidera restituire un tipo di data solo come data, utilizzare

CONVERT(date, SYSDATETIME())

o

SELECT CONVERT(date,SYSDATETIME()) 

o

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

0

Prova questo.

SELECT DATEADD(DD, 0, DATEDIFF(DD, 0, GETDATE()))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.