Cómo transmitir DateTime a Time

Resuelto goofyui asked hace 9 años • 3 respuestas

Estoy transmitiendo DateTimeel campo a Time mediante el uso CASTde sintaxis.

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

Fecha y hora 2015-03-19 00:00:00.000

Salida actual: tiempo 03:05:36.0000000

Necesito solo HH:MM:SSmilisegundos o 0000, no milisegundos.

Cómo filtrarlo o transmitirlo al HH:MM:SSformato exacto.

goofyui avatar May 04 '15 21:05 goofyui
Aceptado

Timeno se almacena con su formato de visualización en SQL Server.
Por tanto, desde la perspectiva del usuario, se puede decir que no tiene formato.
Por supuesto, eso no es del todo exacto ya que tiene un formato de almacenamiento , pero como usuario promedio no puedes usarlo.
Esto es válido para todos los tipos de datos de fecha y hora :
Date, DateTimeOffset, DateTime2, y .SmallDateTimeDateTimeTime

Si necesita un formato, entonces no necesita transmitir timea char. Utilice Convertpara obtener lo charque necesita:

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

Aquí hay algunos datos de fondo si está interesado:

En este artículo publicado en 2000, el escritor explica en profundidad cómo trata SQL Server las fechas y horas. Dudo que haya habido algún cambio significativo entre 2000 y 2015 en la forma en que SQL Server almacena y datevalora internamente.timedatetime

Aquí están las citas relevantes, si no desea leerlas todas:

Entonces, ¿cómo almacena SQL Server las fechas internamente? Utiliza 8 bytes para almacenar un valor de fecha y hora: los primeros 4 para la fecha y los segundos 4 para la hora. SQL Server puede interpretar ambos conjuntos de 4 bytes como números enteros.
........
........
SQL Server almacena el segundo número entero de la hora a medida que avanza el reloj después de la medianoche. Un segundo contiene 300 tics, por lo que un tic equivale a 3,3 milisegundos (ms).

Dado que timeen realidad se almacena como un entero de 4 bytes, en realidad no tiene un formato como parte integral del tipo de datos.

Es posible que también desee consultar este artículo para obtener una explicación más detallada con ejemplos de código.

Zohar Peled avatar May 04 '2015 14:05 Zohar Peled

Puede lograrlo con CASTun simple uso TIME(0)del tipo de datos de la siguiente manera:

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

PRODUCCIÓN:

01:05:06

Stanislovas Kalašnikovas avatar Feb 02 '2016 13:02 Stanislovas Kalašnikovas

Servidor SQL 2008:

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

Versiones anteriores:

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

Otras opciones:

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

La forma más sencilla de obtener la hora de la fecha y hora sin una pila de milisegundos es:

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

Hora y Minuto

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