我习惯使用默认值''获取我的存储过程的参数。我想检查是否选择了Date,如果是,我想要执行My Between Clause。在Normal Scenario中,我会这样做
SELECT tbl1.Column1,tbl1.Column2 FROM table1 tbl1
WHERE tbl1.Column1 = CASE WHEN @Column1Val = '' THEN tbl1.Column1 ELSE @Column1Val END
但我不能用Between Clause做到这一点。除了动态查询之外,我无法想办法做到这一点。除了动态查询之外还有其他方法吗?
这就是我想要做的事情
SELECT tbl1.Column1,tbl1.Column2 FROM table1 tbl1
WHERE tbl1.txnDate = CASE WHEN @DateTo = '1900-01-01' AND @DateFrom = '1900-01-01'
THEN CAST(tbl1.txnDate AS DATE)
ELSE CAST(tbl1.txnDate AS DATE) BETWEEN @DateTo AND @DateFrom
END
答案 0 :(得分:2)
试试这个:
SELECT tbl1.Column1,tbl1.Column2
FROM table1 tbl1
WHERE
(@DateTo = '1900-01-01' AND @DateFrom = '1900-01-01')
OR
(
NOT (@DateTo = '1900-01-01' AND @DateFrom = '1900-01-01')
AND (CAST(tbl1.txnDate AS DATE) BETWEEN @DateFrom AND @DateTo)
)
根据我的理解,'1900-01-01'是开始日期和结束日期的默认值,因此如果用户为开始日期和结束日期选择了一些非默认值,则只需要过滤器。如果这是你需要的,请告诉我。