2015-11-03 60 views
1

我的表名中包含以下列:Trip;回覆:在SQL Server中減去兩個其他列的計算列

trip_no (PK, int, not null), 
ID_company (FK, int not null), 
plane (char(25), not null), 
town_from (char(25) not null), 
town_to (char(25) not null), 
time_out (datetime, not null), 
time_in (datetime, not null), 
time_out_only (time(0), null), 
time_in_only (time(0) null), 
time_in_flight (time(0) null); 

對於最後三列我的第一行看起來像這樣;

time_out_only time_in_only time_in_flight 
14:30:00  17:50:00  null 

我想要飛行時間計算到02:20:00。所以,我想的代碼time_in_flight等於time_in_only少time_out_only,如下,

ALTER TABLE Trip 
SET time_in_flight = time_in_only - time_out_only; 

我接收的錯誤消息是

「消息102,級別15,狀態1,2.不正確的行語法靠近 'Time_in_Flight'。

除非我不正確的是使用SET,我應該使用不同的功能,我很困惑,因爲我要去哪裏錯了。但是我以前認爲這個語法對我有用。

任何人都可以指導我在哪裏我錯了,並幫助我弄清楚如何使用一些函數和公式減去兩列。

謝謝喬西

+0

好事者好奇:您可以從23:30到1:50(又名從第一天到第二天)航班嗎?你能否有持續24小時以上的航班(旅程,旅程)? –

+0

@PhilipKelley .......是的,我可以有超過24小時的航班,最後看討論。謝謝 – Josie

回答

1

首先,沒有減少運營商的時間。因此,使用

SELECT time_in_only - time_out_only 
FROM trip 

您將獲得:

操作數的數據類型時間是減法運算符無效。

如果你想計算列可以先DROP column並重新創建它:

ALTER TABLE Trip 
DROP COLUMN time_in_flight; 

ALTER TABLE Trip 
ADD time_in_flight 
    AS DATEADD(mi, DATEDIFF(mi, time_out_only,time_in_only), CAST('00:00:00' AS TIME)); 

LiveDemo

如果你不希望重建表結構,並計算手動使用UPDATE

UPDATE Trip 
SET time_in_flight = DATEADD(mi, 
        DATEDIFF(mi, time_out_only,time_in_only), CAST('00:00:00' AS TIME)); 

LiveDemo2

最後可能的解決方案是創建視圖:

CREATE VIEW vw_Trip 
AS 
SELECT -- cols, 
    time_in_flight = DATEADD(mi, 
       DATEDIFF(mi, time_out_only,time_in_only), CAST('00:00:00' AS TIME)) 
FROM Trip 
+0

謝謝你,我用過你的第一個例子,我刪除了專欄,然後重新創建了它,而且工作正常,但我有一個問題。一排有16/20的時間,03.40的時間爲760分鐘。我如何格式化我的專欄以反映24小時制並確保我的答案是正面的? – Josie

+0

@Josie檢查https://data.stackexchange.com/stackoverflow/query/384364你的答案是positve,你會得到'11:20:00'這是正確的 – lad2025

+0

@Josie無論如何,你如何計算這個? 16.20到3.40 - 時間跨度是'11:20'和'680分鐘'不是760.如果你需要幾分鐘的時間使用:'DATEDIFF(mi,'00:00:00',DATEADD(mi,DATEDIFF(mi,time_out_only,time_in_only ),CAST('00:00:00'AS TIME)));' – lad2025