Sql 如果一个条件在运行中失败,但仍必须选择记录,该怎么办?
我试图只挑选那些在OPENINGDATE和GETDATE之间datediff为 声明@NotificationAllowed位 Set@NotificationAllowed=ISNULLSelect NotificationAllowed来自角色,其中RoleID=@RoleID,0 如果@NotificationAllowed=1 开始 选择@NotificationAllowed作为允许,Works.NIT_No,Works.WorkNo,Works.WorkName,DATEDIFFday,Convertdate,GETDATE,Works.OpeningDate作为TotalDays保留 ,Convertvarchar11,Works.OpeningDate,106作为OpeningDate 从作品 其中DATEDIFFday、Convertdate、GETDATE、Works.OpeningDate介于0和3之间 和 CONVERTvarchar5,Works.OpeningTime,108>CONVERTvarchar5,GETDATE,108 和 Works.Organization\u ID=Case当@RoleID=1时,则Works.Organization\u ID ELSE@OrgID end 终止 其他的 开始 选择0作为允许,选择NIT_No、选择WorkNo、选择WorkName、选择TotalDaysRemaining,选择null作为OpeningDate 终止Sql 如果一个条件在运行中失败,但仍必须选择记录,该怎么办?,sql,sql-server,tsql,sql-server-2014,Sql,Sql Server,Tsql,Sql Server 2014,我试图只挑选那些在OPENINGDATE和GETDATE之间datediff为 声明@NotificationAllowed位 Set@NotificationAllowed=ISNULLSelect NotificationAllowed来自角色,其中RoleID=@RoleID,0 如果@NotificationAllowed=1 开始 选择@NotificationAllowed作为允许,Works.NIT_No,Works.WorkNo,Works.WorkName,DATEDIFFda
只需将这两个日期条件与OR组合即可。我还更改了Datediff功能,使其不再具有另一个功能,而不会使其变得更复杂。到目前为止,您尝试了什么?为什么不将AND和OR与要检查的条件结合使用呢?你可以简单地在一个表达式中写两次相同的条件,比如A和B,或者A和C,或者不是B和C。另外,将日期转换为文本来比较它们会增加不必要的工作。自2008年以来,这种方法一直奏效:将[MyDate]作为时间来使用
Declare @NotificationAllowed bit
Set @NotificationAllowed= ISNULL((Select NotificationAllowed from Roles where RoleID= @RoleID),0)
IF @NotificationAllowed=1
BEGIN
Select @NotificationAllowed as IsAllowed, Works.NIT_No, Works.WorkNo, Works.WorkName, DATEDIFF(day, Convert(date,GETDATE()), Works.OpeningDate) as TotalDaysRemaining
,Convert(varchar(11), Works.OpeningDate, 106) as OpeningDate
from Works
Where DATEDIFF(day, Convert(date,GETDATE()), Works.OpeningDate) <=3
AND
DATEDIFF(day, Convert(date,GETDATE()), Works.OpeningDate) >=0
AND
CONVERT(varchar(5), Works.OpeningTime, 108) > CONVERT(varchar(5), GETDATE(), 108)
AND
Works.Organization_ID= Case When @RoleID=1 then Works.Organization_ID ELSE @OrgID end
END
ELSE
BEGIN
Select 0 as IsAllowed, '' AS NIT_No, '' AS WorkNo, '' AS WorkName, '' as TotalDaysRemaining, null as OpeningDate
END
Declare @NotificationAllowed bit
Set @NotificationAllowed= ISNULL((Select NotificationAllowed from Roles where RoleID= @RoleID),0)
IF @NotificationAllowed=1
BEGIN
Select @NotificationAllowed as IsAllowed, Works.NIT_No, Works.WorkNo, Works.WorkName, DATEDIFF(day, Convert(date,GETDATE()), Works.OpeningDate) as TotalDaysRemaining
,Convert(varchar(11), Works.OpeningDate, 106) as OpeningDate
from Works
Where (DATEDIFF(day, Convert(date,GETDATE()), Works.OpeningDate) BETWEEN 0 and 3
OR
CONVERT(varchar(5), Works.OpeningTime, 108) > CONVERT(varchar(5), GETDATE(), 108))
AND
Works.Organization_ID= Case When @RoleID=1 then Works.Organization_ID ELSE @OrgID end
END
ELSE
BEGIN
Select 0 as IsAllowed, '' AS NIT_No, '' AS WorkNo, '' AS WorkName, '' as TotalDaysRemaining, null as OpeningDate
END