如何在SQL中用另一个条件替换日期?

时间:2019-10-24 16:35:31

标签: sql sql-server

我有一个包含很多日期范围的数据集。我想构建一个仅让我选择过去30天中的某几天的代码。但是,我想截断或排除范围开始前的几天。

假设我的数据集是这样的:

StayID StayStart StayEnd
1      Jan 1     Jan 10
2      Jan 1     Feb 28
3      Feb 1     Feb 10
4      Feb 10    Feb 28

我也有一个参数{?ReportStart},假设我将其设置为2月1日。首先,我将排除此之前的所有Stays,但我也想修改日期,以便所有日期都在所选范围之后。我想要以下输出:

StayID StayStart StayEnd
2      Feb 1     Feb 28
3      Feb 1     Feb 10
4      Feb 10    Feb 28

我想我应该做这样的事情,但是我对SQL还是很陌生:

SELECT StayID, 
(SELECT CASE WHEN StayStart < {?ReportStart} THEN {?ReportStart}
    ELSE StayStart
    END
    ) AS StayStart,
StayEnd

我走对了吗?任何建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

似乎想要:

select stayId,
       (case when StayStart < {?ReportStart} then {?ReportStart} else StayStart end) as StayStart,
       StayEnd
from t
where stayEnd > {?ReportStart};

许多数据库也支持least()greatest()

select stayId,
       greatest({?ReportStart}, StayStart) as StayStart,
       StayEnd
from t
where stayEnd > {?ReportStart};