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_TS
和 BEGIN_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 参数。
你能帮我改一下语法吗? 我必须在 SQL 服务器中编写以下代码。 这在 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
数据类型。
在 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 参数。