Como converter o DateTime para o Horário

Estou lançando o campo DateTime para o tempo usando a syntax CAST .

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

DateTime 2015-03-19 00:00:00.000

Produção atual: tempo 03:05:36.0000000

Preciso apenas de HH:MM:SS e não de milissegundos ou 0000

Como filtrar ou converter para o formato exato de HH:MM:SS .

Time não é armazenado com seu formato de exibição no SQL Server.
portanto, da perspectiva do usuário, você pode dizer que não tem formato.
é claro, isso não é totalmente preciso, pois tem um formato de armazenamento , mas como um usuário comum você não pode realmente usá-lo.
Isso vale para todos os tipos de dados de data e hora:
( Date , DateTimeOffset , DateTime2 , SmallDateTime , DateTime e Time ).

Se você precisa de um formato, não precisa lançar o time mas sim um char . Use o Convert para obter o char você precisa:

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

Aqui estão alguns dados do backgroud se você estiver interessado:

Neste artigo publicado em 2000, o escritor explica detalhadamente como o SQL Server trata datas e horas. Duvido que algo significativo tenha sido alterado entre 2000 e 2015 na maneira como o SQL Server armazena valores de date , time e datetime e datetime internamente.

Aqui estão as citações relevantes, se você não quiser ler tudo isso:

Então, como o SQL Server armazena internamente as datas? Ele usa 8 bytes para armazenar um valor de data e hora – os primeiros 4 para a data e o segundo 4 para a hora. O SQL Server pode interpretar os dois conjuntos de 4 bytes como números inteiros.
……..
……..
O SQL Server armazena o segundo número inteiro da hora como o número de pulsos do relógio após a meia-noite. Um segundo contém 300 carrapatos, portanto, um carrapato é igual a 3,3 milissegundos (ms).

desde que o time é realmente armazenado como um inteiro de 4 bytes, ele realmente não tem um formato como parte integrante do tipo de dados.

Você também pode querer verificar este artigo para obter uma explicação mais detalhada com exemplos de código.

Você pode consegui-lo com CAST apenas para usar o tipo de dados TIME(0) no seguinte:

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

SAÍDA:

01:05:06

SQL Server 2008:

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

Versões recentes:

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

Outras opções:

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

A maneira mais simples de obter o tempo de data e hora sem pilha de milissegundos é:

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

Hora e minuto

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