2011-06-23 28 views
5

Tengo un desplazamiento de columna en db como varchar(50) que contiene un valor como 05:30:00 o -2:15:00.Agregar o restar hora de la fecha y hora en el servidor SQL

Necesito sumar o restar este valor de otra columna que es un tipo de datos DATETIME como 2011-07-22 14:51:00.

+12

hay una razón por la que no acepta respuestas? –

+2

Esta es una pregunta muy útil y la respuesta de Paul McLean fue acertada. Marcar como aceptado. – gligoran

Respuesta

16

intentar algo así como -

select convert(datetime, '05:30:00') + GETDATE() 
+1

¡Respuesta perfecta !, esto es exactamente lo que estaba buscando ... :) – Bravo

1

¿Cuál es su plataforma de base de datos?

En MS SQL usted lo haría así ...

-- Create some test data 
create table dbo.MyData (
    Adjustment varchar(50) NOT NULL, 
    BaseDate datetime NOT NULL 
) on [primary] 
go 

insert into dbo.MyData (Adjustment, BaseDate) values ('05:30:00', cast('2011-07-22 14:51:00' as datetime)) 
insert into dbo.MyData (Adjustment, BaseDate) values ('-2:15:00', cast('2011-06-12 10:27:30' as datetime)) 
go 

-- Perform the adjustment 
select 
    c.Adjustment, 
    c.BaseDate, 
    c.AdjSecs, 
    dateadd(s, c.AdjSecs, c.BaseDate) as AdjustedDate 
from (
    select 
     case 
     when left(Adjustment, 1) = '-' then -1 * datediff(s, 0, right(Adjustment, len(Adjustment) - 1)) 
     else datediff(s, 0, right(Adjustment, len(Adjustment) - 1)) 
     end as AdjSecs, 
     Adjustment, 
     BaseDate 
    from dbo.MyData 
) as c 

Nota, esto toma en cuenta los períodos de ajuste negativos también.

1

reemplazar la función getdate() con su columna de fecha

DECLARE @mytime AS VARCHAR(10) 

SET @mytime = '2:15:00' 

SELECT DATEADD(
s 
,CASE 
    WHEN SUBSTRING(@mytime,1,1)='-' 
      THEN -DATEDIFF(s,0, SUBSTRING(@mytime,2,LEN(@mytime)-1) 
      ELSE DATEDIFF(s,0, @mytime) 
    END 
,GETDATE() 
) 
Cuestiones relacionadas