2015-06-18 28 views
-2

的SQL Server:添加兩次在一起,並追加到給定的日期SQL服務器:添加兩次在一起,並追加到給定的日期

enter image description here

這裏startTimevarchar

  • sd手段的startDate
  • ed表示結束日期

必需的新列有:

    1. sd + startTime例:2015-06-25 23:00
  • ed + (startTime + duration)例:2015-08 -23 00:30

請注意時間cl早在這裏。

謝謝

+1

你要顯示它還是要在數據庫 –

+0

來更新它,我需要這與選擇查詢@AmeyaDeshpande –

+0

創建一個sqlfiddle –

回答

4

我認爲你需要像這樣: -

Set Nocount On; 

Declare @sd  Date 
     ,@time  Varchar(5) 
     ,@ed  Date 
     ,@Duration Varchar(8) 

Select @sd = '2015-06-09' 
     ,@time = '23:00' 
     ,@ed = '2015-08-22' 
     ,@Duration = '01:30:00' 

Select Cast(@time As Datetime) + Cast(@sd As Datetime) As startdate 
     ,Cast(@ed As Datetime) + Cast(@time As Datetime) + Cast(@Duration As Datetime) As enddate 

編輯: -

Set Nocount On; 

If Object_Id('tempdb.dbo.#DateTimeTogather') Is Not Null 
Begin 
    Drop Table #DateTimeTogather; 
End 

Create Table #DateTimeTogather 
(
    scheduleId    Int Primary Key 
    ,startTime    Varchar(5) 
    ,sd      Date 
    ,programId    Int 
    ,ed      Date 
    ,duration    Time 
) 

Insert Into #DateTimeTogather(scheduleId,startTime,sd,programId,ed,duration) Values 
(20,'23:00','2015-06-09',50,'2015-08-22','01:30:00') 
,(21,'09:00','2015-06-07',29,'2015-08-22','00:45:00') 
,(22,'14:00','2015-06-06',14,'2015-08-22','00:35:00') 
,(23,'17:30','2015-06-13',7,'2015-06-13','00:45:00') 
,(24,'19:00','2015-06-06',65,'2015-06-27','00:30:00') 
,(25,'10:00','2015-06-06',81,'2015-06-17','04:12:00') 
,(26,'17:00','2015-06-06',7,'2015-06-27','00:45:00') 
,(27,'12:30','2015-06-06',7,'2015-06-27','00:45:00') 

Select dt.scheduleId 
     ,Cast(dt.sd As Datetime) + Cast(dt.startTime As Datetime) As startdate 
     ,Cast(dt.ed As Datetime) + Cast(dt.startTime As Datetime) + Cast(dt.duration As Datetime) As enddate 
From #DateTimeTogather As dt With (Nolock) 

這給沒有錯誤

+0

得到錯誤 '轉換失敗時,轉換日期和/或時間,從字符string.' –

+0

需要每個列的數據類型,然後我可以告訴你一件事或指導你的東西 –

+0

'聲明@sd日期 ,@時間VARCHAR(5) ,@ ed日期 ,@持續時間' –

0

好,因爲你是一個我不得不忽略的varchar數據類型並假設你的SD列讀dd-mmm-yyyy 00:00:00。如果它的SQL Server 2008+可以使用下面的代碼在午夜給出日期。

CONVERT(DATE,sd, 101) 

畢竟日期和時間正確轉換下面的查詢應該這樣做:

SELECT (sd + starttime) as StartDatetime, (sd + startTime + duration) as EndDateTime