SQL 服务器查询 - 语法更正

SQL Server query - Correction in syntax

你能帮我改一下语法吗? 我必须在 SQL 服务器中编写以下代码。 这在 Oracle 数据库中工作得很好。

Select to_number(substr((((END_TS - BEGIN_TS)*(24*60*60))),1,10)) AS EXECUTION_TIME 
from TABLE B

另外 END_TSBEGIN_TS 属于 datetime 数据类型。

在 SQL 中,不能像在 Oracle 中那样直接对日期执行服务器数学运算。在操作它之前,您需要应用 datediff 函数来计算差异:

select convert(numeric(10,9),left(datediff(second,begin_ts,end_ts)/(24.0*60*60),10)) from table;

请注意,除数中的表达式需要包含浮点数(因此为“.0”),否则结果将四舍五入为整数。

进行日期计算后,left函数相当于Oracle中的substring。它转换为 varchar,然后取前 10 个字符。然后将 returns 转换为数字,这相当于 Oracle 的可变长度数字。需要告诉convert你期望小数点后的数字,否则会四舍五入。

前 10 个字符的子串有难闻的气味,我会忽略它。此代码段不限制前十个字符进行计算。

select datediff(second,begin_ts,end_ts)/(24.0*60*60) from table; 

另请注意,Oracle 版本提供小数日期。如果您只想要一整天,那么使用 "day" 作为 datediff 的 datepart 参数。