Come ottenere la data corrente senza la parte oraria


83

In SQL Server 2005 come posso ottenere la data corrente senza la parte oraria? Ho usato GETDATE()ma vorrei che avesse un tempo di 00: 00: 00.0

Risposte:


119

Il più veloce se devi iterare su un recordset e non hai una data in SQL Server 2008

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

Due risposte diverse ed eccellenti su StackOverflow lo confermano: una , due

Le conversioni di Varchar sono uno dei modi peggiori per farlo. Certo, per un valore potrebbe non importare, ma è una buona abitudine entrare.

In questo modo è anche deterministico, ad esempio se si desidera indicizzare una colonna calcolata. Anche le persone che scrivono libri su SQL Server rimangono sorpresi dalle conversioni del datetime

Questa tecnica è anche estensibile.

  • ieri: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • inizio del mese: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • fine del mese scorso: DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
  • inizio del prossimo mese: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)

Modificare:

Come ho già detto sul determinismo, i metodi varchar non sono sicuri se non si utilizza lo stile 112.

Altre risposte qui indicano che non lo avresti mai applicato a una colonna. Questo è corretto, ma potresti voler selezionare 100k righe o aggiungere una colonna calcolata o GROUP BY solo per data. Quindi devi usare questo metodo.

L'altra risposta menziona anche lo stile 110. Questa non è la lingua o SET DATEFORMAT sicuro e fallisce con l'impostazione della lingua "britannica". Consulta la guida definitiva ai tipi di dati datetime di Tibor Karaszi.


1
Il link fornito è morto.
Viswanathan Iyer,

6

Devi convertirlo in varchar specificando un modello di formato (110 in questo caso) quindi convertire (o eseguire il cast) di nuovo in datetime.

select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)
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.