在Sql Server中使用之间的Case语句

时间:2014-07-22 06:00:49

标签: sql sql-server sql-server-2008

我习惯使用默认值''获取我的存储过程的参数。我想检查是否选择了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

1 个答案:

答案 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'是开始日期和结束日期的默认值,因此如果用户为开始日期和结束日期选择了一些非默认值,则只需要过滤器。如果这是你需要的,请告诉我。

Demo