In SQL Server 2005 come ottengo la data corrente senza la parte dellora? Sto utilizzando GETDATE() ma vorrei che avesse un tempo di 00: 00: 00.0

Risposta

Il più veloce se devi iterare su un recordset e non “avere la data in SQL Server 2008

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

Due risposte diverse ed eccellenti su StackOverflow lo confermano: One , Two

Le conversioni Varchar sono uno dei modi peggiori per farlo. Naturalmente, per un valore potrebbe non avere importanza, ma “è una buona abitudine entrare.

Questo modo è anche deterministico , diciamo se vuoi indicizzare una colonna calcolata. Anche le persone che scrivono libri su SQL Server vengono scoperte con conversioni datetime

Questa tecnica è anche estendibile.

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

Modifica :

Come ho accennato a proposito del determinismo, i metodi varchar non sono sicuri a meno che non si utilizzi lo stile 112.

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

Anche laltra risposta menziona lo stile 110. Questo non è linguaggio o SET DATEFORMAT sicuro e fallisce con limpostazione della lingua “british”. Consulta la guida definitiva ai tipi di dati datetime di Tibor Karaszi.

Commenti

  • Fornito lin k è morto.

Risposta

Devi convertirlo in varchar specificando un modello di formato (110 in questo case) quindi converti (o trasmetti) di nuovo in datetime.

select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime) 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *