2011-06-23 34 views
5

Tôi có một cột bù trong db là varchar(50) có chứa một giá trị như 05:30:00 hoặc -2:15:00.Thêm hoặc trừ thời gian từ datetime trong máy chủ SQL

Tôi cần thêm hoặc trừ giá trị này từ cột khác là DATETIME kiểu dữ liệu là 2011-07-22 14:51:00.

+12

là có một lý do bạn không bao giờ chấp nhận câu trả lời? –

+2

Đây là một câu hỏi rất hữu ích và câu trả lời của Paul McLean đã được phát hiện. Đánh dấu nó là được chấp nhận. – gligoran

Trả lời

16

thử một cái gì đó giống như -

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

Câu trả lời hoàn hảo !, đây chính xác là những gì tôi đang tìm kiếm ... :) – Bravo

1

nền tảng cơ sở dữ liệu của bạn là gì?

Mở MS SQL bạn muốn làm điều đó như thế này ...

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

Lưu ý, đây mất tài khoản của giai đoạn điều chỉnh tiêu cực quá.

1

Thay thế getdate() chức năng với cột ngày của bạn

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() 
) 
Các vấn đề liên quan