If statement 在WHERE子句中使用IF语句

If statement 在WHERE子句中使用IF语句,if-statement,sql-server-2012,where,between,If Statement,Sql Server 2012,Where,Between,我今天要现场直播所有的节目 我已经为PC表上的每个propID设置了DateLive和DateRemoved,但有些设置了空DateRemoved(因为它们仍然处于活动状态) 我需要在where中使用IF(CASE)语句来执行此操作 类似于 就在今天, 并且(如果他们没有删除日期),则datelive

我今天要现场直播所有的节目

我已经为PC表上的每个propID设置了DateLive和DateRemoved,但有些设置了空DateRemoved(因为它们仍然处于活动状态)

我需要在where中使用IF(CASE)语句来执行此操作

类似于

就在今天, 并且(如果他们没有删除日期),则datelive
选择
C.日历日期,
个人电脑
从日历C
交叉连接属性计数PC
其中C.CalendarDate=getdate()
及
(案例
当PC.DateRemoved为空时,则PC.DateLive和PC.DateRemoved之间的C.CalendarDate为空
当PC.DateRemoved=NULL时,则PC.DateLive

尝试在where子句中插入以下内容,替换括号中的大小写:


。。。和((pc.dateremoved在pc.datelive和pc.dateremoved之间不为NULL,c.calendarDate在pc.dateremoved之间)或(pc.dateremoved为NULL,pc.datelive您不需要
大小写表达式(或
IF
语句)的复杂性,只需要带
的布尔逻辑即可

Where C.CalendarDate = getdate()

AND
(
   (PC.DateRemoved IS NOT NULL AND
      C.CalendarDate BETWEEN PC.DateLive AND PC.Dateremoved)
    OR
   (PC.DateRemoved IS NULL AND PC.DateLive < C.CalendarDate)
)
因为
getdate()
返回一个包含两个部分的
datetime
,而不仅仅是一个没有时间组件的普通日期。

其中C.CalendarDate=getdate()
where C.CalendarDate = getdate()
    AND ((PC.DateRemoved is not null AND C.CalendarDate between PC.DateLive AND PC.Dateremoved)
         OR
         (PC.DateRemoved is null AND PC.DateLive < C.CalendarDate)
        )
和((PC.DateRemoved不为null,且C.CalendarDate介于PC.DateLive和PC.DateRemoved之间) 或 (PC.DateRemoved为空,PC.DateLive
您已经在带有Where子句的IF语句中。您只需构建布尔逻辑,在选择特定记录时,该逻辑的计算结果为TRUE

Where C.CalendarDate = CONVERT(date,getdate())
where C.CalendarDate = getdate()
    AND ((PC.DateRemoved is not null AND C.CalendarDate between PC.DateLive AND PC.Dateremoved)
         OR
         (PC.DateRemoved is null AND PC.DateLive < C.CalendarDate)
        )