我将两个变量(例如SDate
和EDate
)传递给存储过程,我想要从VDAte
SDate
和EDate
之类的表中选择数据SDate
和EDate
都不为空。如果EDate
为空,那么我想选择VDAte
= SDAte
的数据。我尝试使用{{1在where子句中有{}}和If..Else
,但它给出了不正确的syntx错误。
查询:
Case
任何帮助都将不胜感激。
答案 0 :(得分:3)
稍微调整一下名字,
SELECT Column1, Column2
from MyTable
where VDate between @SDate and isnull(@EDate, @SDate)
应该这样做。
答案 1 :(得分:0)
我认为您可以尝试以下查询:
SELECT
Column1,
Column2
FROM
Table t
WHERE
t.VDate IN (
SELECT
VDate
FROM
Table
WHERE
VDate BETWEEN SDate AND EDate
AND
EDate is not null
)
OR
(
t.VDate = SDate
AND
EDate is null
)
如果EDate
不为空,则t.VDate
介于SDate
和EDate
之间,否则为t.VDate = SDate
。
答案 2 :(得分:0)
问题在于你不能以这种方式在where子句中使用IF。
因此,如果您比较的数据取决于EDate值,您可以这样做:
SELECT Column1 ,column2
from Table t
WHERE
(t.EDate IS NOT NULL AND t.VDate IN (SELECT VDate FROM Table where VDate BETWEEN SDate AND EDate))
OR (t.EDate IS NULL AND t.VDate IN (SELECT SDate FROM Table))
如果EDate不为null,则查询选择介于两者之间的VDates。如果为null,则为另一个。
答案 3 :(得分:0)
试试这个:
SELECT Column1, Column2
from MyTable
where (VDate between @SDate and @EDate and (@SDate+@EDate is not null)) or (VDate = @Sdate and @Edate is null)
@Philip Kelley的答案也是一个很好的方法