Cómo transmitir DateTime a Time
Estoy transmitiendo DateTime
el campo a Time mediante el uso CAST
de 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:SS
milisegundos o 0000, no milisegundos.
Cómo filtrarlo o transmitirlo al HH:MM:SS
formato exacto.
Time
no 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 .SmallDateTime
DateTime
Time
Si necesita un formato, entonces no necesita transmitir time
a char
. Utilice Convert
para obtener lo char
que 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 date
valora internamente.time
datetime
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 time
en 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.
Puede lograrlo con CAST
un 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
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