2016-10-28 33 views
1
@TimeCurr Char(1) 

SELECT RecordDate, a, b,c 
FROM tbl_xyz 
WHERE 1 = 1 
AND 

如果@TimeCurr = 'Y' 然后 RecordDate = GETDATE()SQL - 如果param空然后省略标准在WHERE子句

如果@TimeCurr = 'N' 然后 RecordDate < = GETDATE()

if @TimeCurr = Null 然后完全忽略标准。我们怎样才能做到这一点?

+1

'(ISNULL OR CASE ... END)' –

+0

您正在使用哪些DBMS? –

回答

1

事情是这样的:

SELECT RecordDate, a, b,c 
FROM tbl_xyz 
WHERE 1 = 1 AND 
     ((@TimeCurr = 'Y' AND RecordDate = CAST(GetDate() as date)) OR 
     (@TimeCurr = 'N' AND RecordDate <= GetDate()) OR 
     @TimeCurr IS NULL 
    ); 

基于使用的GETDATE(),我猜测你是使用SQL Server。如果是这样,功能GETDATE()返回一个日期/时间值。你通常不想使用=。这就是为什么我将它转换为日期,假设RecordDate实际上是一个没有时间分量的日期。