Sql server 替换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

我正在尝试将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
    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年)的东西,而你真的需要使用更小的数字?