2010-05-25 8 views

Respuesta

6

En caso de que alguien más tropiece con este hilo (o en caso de que el póster original aún pueda usar esta respuesta), consulte la función TO_TIMESTAMP (fecha, hora) en LogParser que le permite combinar una fecha y hora con una hora -solo marca de tiempo en un valor de marca de tiempo completo ... y le ahorra tener que convertir en el db ...

18

Usted puede añadir los dos valores después de la fundición a la fecha y hora tipos de datos, si está utilizando SQL Server 2008 o posterior. Aquí hay un ejemplo.

declare @datet datetime; 
set @datet = GETDATE(); 

select 
    @datet, 
    cast(@datet as date), 
    cast(@datet as time); 

select 
    cast(cast(@datet as date) as datetime), 
    cast(cast(@datet as time) as datetime), 
    cast(cast(@datet as date) as datetime) + cast(cast(@datet as time) as datetime); 
+0

La fecha y la hora como tipos de datos parecen mucho más limpias que tirar de las posiciones de una cadena. Nuevo en 08, dices. Por lo que me tiene los primeros 9 yardas - i puede actualizar todas las filas de la tabla - ¿Cómo puedo actualizar sólo las filas insertadas - se parece a un mínimo que debería buscar en 'Insertar antes' en lugar de después THX Si – justSteve

+0

puede, evitar el disparador por completo y simplemente agregar otra columna a la tabla como una columna calculada. Puedes hacer esto usando una declaración s como esta: ALTER TABLE puede agregar ADD DateAndTime (cast (cast (@datet como date) como datetime) + cast (cast (@datet as time) como datetime)); –

+0

En mi caso, tenía un tiempo estático que quería virar y pude evitar el reparto interno en la porción de tiempo. Así que el elenco (elenco (some_date_col como date) como datetime + cast ('11: 59: 59 PM 'como datetime) funcionó espléndidamente y fue un poco más conciso. – jinglesthula

1

Prueba esto:

DECLARE @Date varchar(23) 
     ,@Time varchar(23) 
     ,@Both datetime 

SELECT @Date='2010-05-25 00:00:00.000' 
     ,@Time='2010-01-01 11:11:58.000' 

SELECT @Both=LEFT(@Date,10)+' '+RIGHT(@Time,12) 

SELECT @Both 

SALIDA:

----------------------- 
2010-05-25 11:11:58.000 

(1 row(s) affected) 

Conjunto basado:

DECLARE @INSERTED table(RowID int, DateOf varchar(23), TimeOf varchar(23), DateTimeOf datetime) 

INSERT @INSERTED VALUES (1,'2010-05-25 00:00:00.000','2010-01-01 11:11:58.000',null) 
INSERT @INSERTED VALUES (2,'2010-04-05 00:00:00.000','2010-01-01 12:34:56.789',null) 
INSERT @INSERTED VALUES (3,'2010-03-15 00:00:00.000','2010-01-01 01:01:01.000',null) 


UPDATE @INSERTED 
    SET DateTimeOf=LEFT(DateOf,10)+' '+RIGHT(TimeOf,12) 

SELECT * FROM @INSERTED 

SALIDA:

RowID DateOf     TimeOf     DateTimeOf 
------- ----------------------- ----------------------- ----------------------- 
1  2010-05-25 00:00:00.000 2010-01-01 11:11:58.000 2010-05-25 11:11:58.000 
2  2010-04-05 00:00:00.000 2010-01-01 12:34:56.789 2010-04-05 12:34:56.790 
3  2010-03-15 00:00:00.000 2010-01-01 01:01:01.000 2010-03-15 01:01:01.000 

(3 row(s) affected) 
0

Si tiene la opción de agregar el resultado en una columna nueva, también puede hacer que esa nueva columna una columna calculada y definirla para combinar esas 2 columnas (en un tiempo de diseño).

Dev

Cuestiones relacionadas