你能帮我纠正一下语法吗? 我必须在SQL Server中编写下面的代码。 这在Oracle数据库中运行得很好。
Select to_number(substr((((END_TS - BEGIN_TS)*(24*60*60))),1,10)) AS EXECUTION_TIME
from TABLE B
同样END_TS
和BEGIN_TS
属于datetime
数据类型。
答案 0 :(得分:0)
在SQL Server中,数学不能直接在日期执行,就像在Oracle中一样。在操作之前,您需要应用datediff函数来计算差异:
select convert(numeric(10,9),left(datediff(second,begin_ts,end_ts)/(24.0*60*60),10)) from table;
请注意除数中的表达式需要有一个浮点数(因此为“.0”),否则结果将四舍五入为整数。
执行日期计算后,left函数相当于Oracle中的子字符串。它转换为varchar然后获取前10个字符。转换然后返回一个数字,这相当于Oracle的可变长度数。有必要告诉转换你期望小数点后面的数字,否则它将会循环。
前10个字符的子字符串有难闻的气味,我会把它留下来。此代码段执行计算而不限制前十个字符。
select datediff(second,begin_ts,end_ts)/(24.0*60*60) from table;
另请注意,Oracle版本提供了小数日期。如果你只想要一整天,那么使用“day”作为dateiff的datepart参数。