Simplemente puede agregar los dos.
- si el
Time part
de tu Date
columna es siempre cero
- y el
Date part
de su Time
columna también es siempre cero (fecha base: 1 de enero de 1900)
Agregarlos devuelve el resultado correcto.
SELECT Combined = MyDate + MyTime FROM MyTable
Justificación (felicitaciones a ErikE / dnolan)
Funciona así debido a la forma en que la fecha se almacena como dos de 4 bytes,
Integers
siendo los 4 bytes de la izquierda los 4 bytes de date
la derecha time
. Es como hacer$0001 0000 + $0000 0001 =
$0001 0001
Editar con respecto a los nuevos tipos de SQL Server 2008
Date
y Time
son tipos introducidos en SQL Server 2008
. Si insiste en agregar, puede usarCombined = CAST(MyDate AS DATETIME) + CAST(MyTime AS DATETIME)
Edit2 con respecto a la pérdida de precisión en SQL Server 2008 y versiones posteriores (felicitaciones a Martin Smith)
Eche un vistazo a ¿Cómo combinar fecha y hora para datetime2 en SQL Server? para evitar la pérdida de precisión con SQL Server 2008 y versiones posteriores.
Lieven Keersmaekers
fuente
1900-01-01
, ¿no?float
. ¿Dónde diablos aprendiste esto? Se almacenan como enteros : la parte de la fecha es el número de días desde una fecha de anclaje, y la parte de la hora es el número de "ticks" desde la medianoche, definiéndose los ticks como 1/300 s paradatetime
y más precisos paratime
ydatetime2
.Si el elemento de tiempo de su columna de fecha y el elemento de fecha de su columna de tiempo son ambos cero, entonces la respuesta de Lieven es lo que necesita. Si no puede garantizar que ese sea siempre el caso, entonces se vuelve un poco más complicado:
fuente
The data types datetime and time are incompatible in the add operator.
Esta es una solución alternativa sin conversiones de caracteres:
De esta forma solo obtendrá una precisión de milisegundos, pero eso normalmente estaría bien. He probado esto en SQL Server 2008.
fuente
Esto funciono para mi
(en SQL 2008 R2)
fuente
Si no está usando SQL Server 2008 (es decir, solo tiene un tipo de datos DateTime), puede usar el siguiente TSQL (ciertamente tosco y listo) para lograr lo que desea:
¡Es duro y listo, pero funciona!
fuente
Si ambos campos son de fecha y hora, simplemente agregarlos funcionará.
p.ej:
Si utilizó el tipo de datos Fecha y hora, simplemente transmita la hora a fecha y hora
p.ej:
fuente
Convierta la primera fecha almacenada en un campo de fecha y hora en una cadena, luego convierta la hora almacenada en un campo de fecha y hora en una cadena, agregue las dos y vuelva a convertir en un campo de fecha y hora, todo utilizando formatos de conversión conocidos.
fuente
Tuve muchos errores como se indicó anteriormente, así que lo hice así
Funcionó para mi.
fuente
Convierta ambos campos en DATETIME:
y si estás usando
Getdate()
usa esto primero:fuente
Huellas dactilares:
fuente
Funciona de maravilla
fuente
SELECT CAST (CAST (@DateField As Date) As DateTime) + CAST (CAST (@TimeField As Time) As DateTime)
fuente
Otra forma es usar
CONCAT
yCAST
, tenga en cuenta, que necesita usarDATETIME2(x)
para que funcione. Puede establecerx
cualquier cosa entre lo que0-7
7
significa que no hay pérdida de precisión.Devoluciones
2018-03-12 07:00:00.0000000
Probado en SQL Server 14
fuente
Para combinar la fecha de una columna datetime y la hora de otra columna datetime, esta es la mejor solución más rápida para usted:
fuente
Me encontré con una situación similar en la que tuve que fusionar los campos Fecha y Hora con el campo Fecha y hora. Ninguna de las soluciones mencionadas anteriormente funciona, especialmente agregar dos campos como el tipo de datos para agregar estos 2 campos no es lo mismo.
Creé la siguiente solución, donde agregué horas y luego minutos a la fecha. Esto funcionó muy bien para mí. Compruébalo y avísame si tienes algún problema.
; con tbl como (seleccione StatusTime = '12 / 30/1899 5:17:00 PM ', StatusDate =' 24/7/2019 12:00:00 AM ') seleccione DATEADD (MI, DATEPART (MINUTE, CAST (tbl .StatusTime AS TIME)), DATEADD (HH, DATEPART (HOUR, CAST (tbl.StatusTime AS TIME)), CAST (tbl.StatusDate as DATETIME))) de tbl
Resultado: 2019-07-24 17: 17: 00.000
fuente