Sql server 替换SQL Server中的最大值/最小值
我正在尝试将Oracle视图转换为SQL Server。其中一部分有以下声明:Sql server 替换SQL Server中的最大值/最小值,sql-server,oracle,Sql Server,Oracle,我正在尝试将Oracle视图转换为SQL Server。其中一部分有以下声明: GREATEST (SYSDATE -(status.status_date + LEAST (status.days_before_past_due, 999999)), 0) AS wo_actual_days_past_due, 我知道最大和最小的功能没有直接的替代品。我在这里找到了另一条线索,有人建议如下: (select max(tmp) from ( select 1 tmp from dual
GREATEST (SYSDATE -(status.status_date + LEAST (status.days_before_past_due, 999999)), 0)
AS wo_actual_days_past_due,
我知道最大和最小的功能没有直接的替代品。我在这里找到了另一条线索,有人建议如下:
(select max(tmp) from (
select 1 tmp from dual
union all
select 2 tmp from dual
union all
select 3 tmp from dual
union all
select 4 tmp from dual
union all
select 5 tmp from dual
union all
select 6 tmp from dual
union all
select 7 tmp from dual
) ) AS number
我试过了,但是把这两个放在一起太疯狂了。以下是我的想法:
(SELECT MAX(C1)
from (
select (GETDATE -(status.status_date +
(SELECT MIN(C2)
from (
select status.days_before_past_due C2 from dual
union all
select 999999 C2 from dual
) as temp
) ) ) C1 from dual
union all
select 0 C1 from dual
) as wo_actual_days_past_due,
但这对我不起作用。我得到GETDATE的“无效列名”。甚至有可能做到我在这里要做的事情吗?有更好的办法吗?如何解决“无效列名”问题?请注意,在Azure SQL DB(以及SQL Server的未来版本)中,将有最大和最小的函数
也许您需要
GETDATE()
对于两个值,我会使用case表达式而不是子查询<代码>最小值(A,B)在A情况。为空值添加适当的逻辑。您可能还需要dateadd
和datediff
函数。SQL Server不像Oracle在date
上那样喜欢在date
上直接计算。那么最不喜欢做什么(status.days\u before\u pass\u due,999999)
呢?你是否曾经有过距离过期时间超过999999天(约2737年)的东西,而你真的需要使用更小的数字?