Come lanciare DateTime in Time

Sto lanciando il campo DateTime su Time usando la syntax CAST .

 select CAST([time] as time) as [CSTTime] 

DateTime 2015-03-19 00:00:00.000

Uscita presente: ora 03:05:36.0000000

Ho bisogno solo di HH:MM:SS e non di Milliseconds o di 0000

Come filtrare o cast per esatto HH:MM:SS Format.

Time non è memorizzato con il suo formato di visualizzazione in SQL Server.
quindi, dal punto di vista dell’utente, puoi dire che non ha alcun formato.
ovviamente, questo non è completamente accurato poiché ha un formato di archiviazione , ma come utente medio non puoi davvero usarlo.
Questo è vero per tutti i tipi di dati di data e ora:
( Date , DateTimeOffset , DateTime2 , SmallDateTime , DateTime e Time ).

Se hai bisogno di un formato allora non hai bisogno di trasmettere a time ma a un char . Usa Convert per ottenere il char ti serve:

 SELECT CONVERT(char(10), [time], 108) as CSTTime 

Ecco alcuni dati di backgroud se sei interessato:

In questo articolo pubblicato nel 2000, lo scrittore spiega in modo approfondito in che modo SQL Server tratta le date e le ore. Dubito che sia cambiato qualcosa di significativo tra il 2000 e il 2015 nel modo in cui SQL Server memorizza internamente i valori di date , time e datetime .

Ecco le citazioni pertinenti, se non vuoi leggerle tutte:

Quindi, in che modo SQL Server memorizza internamente le date? Usa 8 byte per memorizzare un valore datetime, il primo 4 per la data e il secondo 4 per il tempo. SQL Server può interpretare entrambi i set di 4 byte come numeri interi.
……..
……..
SQL Server memorizza il secondo intero per il tempo come il numero di segni di clock dopo mezzanotte. Un secondo contiene 300 tick, quindi un tick equivale a 3,3 millisecondi (ms).

dal time viene effettivamente memorizzato come un intero di 4 byte, in realtà non ha un formato come parte integrante del tipo di dati.

Si potrebbe anche voler controllare questo articolo per una spiegazione più dettagliata con esempi di codice.

Puoi ottenerlo con CAST solo con il semplice TIME(0) datatype nel seguente modo:

 SELECT CAST('2015-03-19 01:05:06.289' AS TIME(0)) 

PRODUZIONE:

01:05:06

SQL Server 2008:

 select cast(MyDate as time) [time] from yourtable 

Versioni precedenti:

 select convert(char(5), MyDate , 108) [time] from yourtable 

Altre opzioni:

 SELECT CONVERT(VARCHAR(20), GETDATE(), 114) 

Il modo più semplice per ottenere il tempo da datetime senza stack millisecondo è:

 SELECT CONVERT(time(0),GETDATE()) 

Ora e minuto

 SELECT substring(CONVERT(VARCHAR, GETDATE(), 108),0,6) AS Time