我习惯使用默认值''将参数获取到存储过程中。我想检查是否选择了日期,如果要选择,请执行“我之间的条款”。在正常情况下,我会这样做
SELECT tbl1.Column1,tbl1.Column2 FROM table1 tbl1
WHERE tbl1.Column1 = CASE WHEN @Column1Val = '' THEN tbl1.Column1 ELSE @Column1Val END
但是我无法使用“之间”子句来做到这一点。除了动态查询之外,我没有其他方法可以做到这一点。除了动态查询,还有其他方法吗?
这就是我想要做的
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
试试这个:
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”是您的开始日期和结束日期的默认值,因此仅当用户为开始日期和结束日期选择了一些非默认值时,才需要过滤器。请让我知道这是否是您需要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句