tsql - 对 2 个日期字段使用 WHERE 子句以及 Between 和 NULL 参数
问题描述
在 SSRS 报告中使用参数和 SQL
@FromDate 和 @ToDate 可以为 null -- 获取所有 4 条记录
@Fromdate 可以有一个日期值,而 @ToDate 为空 - 如果是这种情况,需要获取所有没有 TravelTo Date 的日期值
@Fromdate 和 @todate 有值然后需要获取最后 2 条记录
@FromDate 和 @ToDate 为 null 然后需要获取所有值
我使用下面的代码来获取数据,但我没有得到正确的数据,任何建议都值得赞赏。
哪里(在@FROMSTART 和@TODATE 之间的TravelTo)
或(@TODATE 为空且 TravelFrom >=@FROMSTART )
或(@FROMSTART 为空且 TravelFrom <=@TODATE)
或(@FROMSTART 为空且@TODATE 为空)
SSRS 的参数截图
解决方案
假设日期输入或列本身可能是NULL
,您可以尝试:
SELECT *
FROM yourTable
WHERE
(@FROMSTART > TravelFrom OR @FROMSTART IS NULL OR TravelFrom IS NULL) AND
(@TODATE < TravelTo OR @TODATE IS NULL OR TravelTo IS NULL);
NULL
如果列具有值或输入具有值,则此逻辑将折扣日期范围的开始或结束NULL
。
推荐阅读
- javascript - JS 测验中的必需输入
- maven - 我需要在 Maven 本地存储库中添加 Oracle JDBC 驱动程序
- python - python:numpy子矩阵何时按引用复制,何时按值复制?
- python - 散景:使用编辑工具时禁用自动范围
- css - css底部未定位在页面底部
- javascript - 显示html文件输入的进度?
- model-checking - 使用 nuXmv 进行属性验证期间控制台挂起
- javascript - 如何在js中读取嵌入的html字符串?
- neo4j - 将多个 apoc.path.expand 调用合二为一
- arduino - 如何使用 Arduino + micro SD 卡 + WiFi shield 模拟 USB pendrive?