如何在2个日期列中使用一列中的日期进行搜索?

时间:2012-01-31 04:05:23

标签: sql sql-server

有什么建议吗?

我有一个表tblInstallBase,我必须传递参数WarrantyEnd date来搜索它是否介于日期之间

MFGWarrantyStartDt1 和MFGWarrantyStartDt2

这是正常保修     或

如果介于

之间

MFGWarrantyStartDt2和MFGWarrantyExpDt2它是ExtendedWarranty

3 个答案:

答案 0 :(得分:1)

使用union来获得最佳索引用法:

select 'Normal' as TypeOf,* from tblInstallBase 
where @givenDate>=MFGWarrantyStartDt1 and @givenDate<=MFGWarrantyStartDt2
union all
select 'extended',* from tblInstallBase 
where @givenDate>=MFGWarrantyStartDt2 and @givenDate<=MFGWarrantyExpDt2 

答案 1 :(得分:0)

SELECT 
   CASE WHEN @WarrantyEnd BETWEEN MFGWarrantyStartDt2 AND MFGWarrantyExpDt2 THEN 'ExtendedWarranty'
    ELSE 'Normal Warranty' END
FROM MyTable

答案 2 :(得分:0)

select
case when @WarrantyEnd between MFGWarrantyStartDt1  and MFGWarrantyStartDt2 then 'Normal Warranty'
when @WarrantyEnd between MFGWarrantyStartDt2 and MFGWarrantyExpDt2  then 'Extended Warranty'
else 'Expired' end
from @warantee

注意,如果@WarrantyEnd落在MFGWarrantyStartDt2上,那么它将是“正常保修”,因为第一个条件将得到满足