我需要从表格中获取所有值:
所以我创建了这个请求
DECLARE @currDate DATETIME;
SET @currDate = GETDATE();
SELECT *
FROM table
WHERE
-- here I have some other conditions
AND @currDate >= (CASE WHEN table.validityStart IS NOT NULL THEN table.validityStart ELSE @currDate END)
AND @currDate <= (CASE WHEN table.validityStop IS NOT NULL THEN table.validityStop ELSE @currDate END)
因此,如果start或stop为null,则将当前日期时间与其自身进行比较。我不认为这是创建此请求的最佳方式。
如果值为null但没有将其与自身进行比较,那么是否有可能避免在'where'部分进行验证
答案 0 :(得分:4)
您可以通过以下方式编写条件:
AND (table.validityStart IS NULL OR table.validityStart<=@currDate)
AND (table.validityStop IS NULL OR table.validityStop >=@currDate)
答案 1 :(得分:0)
SQL Server支持不能合并吗? (即选择第一个非空值。)
AND @currDate >= coalesce(table.validityStart, @currDate)
AND @currDate <= coalesce(table.validityStop, @currDate)