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
.
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
.
thử một cái gì đó giống như -
select convert(datetime, '05:30:00') + GETDATE()
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
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á.
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()
)
là có một lý do bạn không bao giờ chấp nhận câu trả lời? –
Đâ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