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)