选择查询结果应该根据过程中的传递参数返回,而不使用if else语句?

时间:2014-11-26 07:08:18

标签: sql sql-server

select 
    id,
    starttime,
    endtime,
    name
from 
    table1
where
    id != 0 
    and starttime >= @startdate and endtime <= @enddate

在上面的查询中,如果@startdate@enddate参数为null而不使用if else,我该如何执行?

starttime >= @startdate and endtime <= @enddate此条件应检查@startdate和@enddate是否为空。否则就不会检查。

对此有何建议?

5 个答案:

答案 0 :(得分:1)

您只需检查变量是否为null,从而根据需要返回true

为每个参数单独执行此操作

where (startdate >= @startdate or @startdate is null)
and (enddate <= @enddate or @enddate is null)

如果其中一个为空

,您也可以“忽略”该条件
where ((startdate >= @startdate and enddate <= @enddate)
or @startdate is null
or @enddate is null)

答案 1 :(得分:1)

ISNULL条件下,您只需COALESCEwhere个功能。

select id,
starttime,
endtime,
name
from table1
where
id != 0 and
starttime >= ISNULL(@startdate,starttime) and endtime <= ISNULL(@enddate,endtime)

答案 2 :(得分:0)

添加额外条件:

and @startdate is not null and @enddate is not null

答案 3 :(得分:0)

试试这个:

为此 应检查@startdate和@enddate是否为空。否则它将不会检查使用第一个答案

如果@startdate为空,则返回true并提供所有结果

select id,
starttime,
endtime,
name
from table1
where
id != 0 and
(starttime >= @startdate or @startdate is null )
and 
(endtime <= @enddate or @enddate is null)

select id,
starttime,
endtime,
name
from table1
where
id != 0 and
(starttime >= @startdate and @startdate is NOT null )
and 
(endtime <= @enddate and @enddate is NOT  null)

答案 4 :(得分:0)

尝试使用OR来检查:

where
(id != 0) 
and
(
     (@startdate IS NULL) OR (@enddate IS NULL)
     OR 
     (starttime >= @startdate and endtime <= @enddate)
)