我在表名Trip中有以下列;
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 less time_out_only,如下所示,
ALTER TABLE Trip
SET time_in_flight = time_in_only - time_out_only;
我收到的错误消息是
“Msg 102,Level 15,State 1,Line 2.语法不正确 “Time_in_Flight”。
除非我使用SET不正确并且我应该使用不同的功能,否则我对我出错的地方感到困惑。但是我之前认为这种语法对我有用。
任何人都可以指导我在这里出错的地方,并帮助我弄清楚如何使用一些函数和公式减去两列。
谢谢Josie
答案 0 :(得分: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