我有以下查询:
SELECT
CASE
WHEN ([DBO].fn_WorkDays(GETDATE(), DATEADD(d, 1, EOMONTH(GETDATE()))) = 2)
THEN 1
END
如果条件为真(显然),则返回1,但如果为false,我希望它不返回任何内容(没有行)。相反,它返回一个空行。如何强制它返回1或什么都没有?
答案 0 :(得分:5)
怎么样
IF [DBO].fn_STRS_WorkDays(GETDATE(), DATEADD(d, 1, EOMONTH(GETDATE()))) = 2
SELECT 1
答案 1 :(得分:3)
你编码的方式总是会返回一行。您可以重新排列查询以将标量函数放在where子句中。
SELECT 1
where [DBO].fn_STRS_WorkDays(GETDATE(), DATEADD(d, 1, EOMONTH(GETDATE()))) = 2
当然,您可以考虑评估该标量函数。众所周知,他们的表现很差。
答案 2 :(得分:3)
从dbo.table中选择*,其中1 = 0
答案 3 :(得分:1)
使用where
子句和子查询:
select 1
from (select [DBO].fn_STRS_WorkDays(GETDATE(),
DATEADD(day, 1, EOMONTH(GETDATE()) )
) as workdays
) x
where workdays = 2;
实际上,子查询不是必需的。我认为where
没有from
看起来很尴尬。你可以把它写成:
select 1
where 2 = [DBO].fn_STRS_WorkDays(GETDATE(),
DATEADD(day, 1, EOMONTH(GETDATE()) )
)
答案 4 :(得分:0)
为了在该条件下实际过滤数据,需要在查询的WHERE子句部分,而不仅仅是在列定义部分。
这可能意味着您需要指定两次条件(一次在列部分中,一次在WHERE子句中)。