it-swarm.it

Come ottenere la data corrente senza la parte oraria

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

88
Piers Myers

Il 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: no , 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 ottengono catturato 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 sicuri e fallisce con l'impostazione della lingua "britannica". Vedi la guida definitiva ai tipi di dati datetime di Tibor Karaszi.

125
gbn

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)
6
mrdenny