2011-06-23 19 views
5

Mam przesunięcie kolumny w db jako varchar(50), które zawiera wartość, taką jak 05:30:00 lub -2:15:00.Dodawanie lub odejmowanie czasu z datetime na serwerze SQL

Potrzebuję dodać lub odjąć tę wartość z innej kolumny, która jest typem danych DATETIME jako 2011-07-22 14:51:00.

+12

jest jakiś powód, dla którego nigdy nie akceptować odpowiedzi? –

+2

To bardzo przydatne pytanie, a odpowiedź Paula McLeana była trafna. Oznacz to jako zaakceptowane. – gligoran

Odpowiedz

16

spróbować czegoś podobnego -

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

Perfect Answer !, to jest dokładnie to, czego szukałem ... :) – Bravo

1

Jaki jest Twój platforma bazy danych?

W MS SQL chcesz zrobić to w ten sposób ...

-- 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 

Uwaga ta uwzględnia negatywnych okresów dostosowawczych też.

1

Wymień getdate() funkcji z datą kolumnie

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() 
) 
Powiązane problemy