If statement 在WHERE子句中使用IF语句
我今天要现场直播所有的节目 我已经为PC表上的每个propID设置了DateLive和DateRemoved,但有些设置了空DateRemoved(因为它们仍然处于活动状态) 我需要在where中使用IF(CASE)语句来执行此操作 类似于 就在今天, 并且(如果他们没有删除日期),则dateliveIf 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
选择
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)
)