2017-06-06 58 views
-1
SELECT * FROM EMPLOYEES 
    WHERE (1 = 1 OR FIRST_NAME = 'renz') 
    AND (1 = 1 OR LAST_NAME LIKE '%t%') 
    AND (1 = 1 OR EMAIL = 'ASD') 
    AND 
    (CASE 
     WHEN ('06/20/2016'!='' AND '01/23/2017'!='') 
     THEN HIRE_DATE BETWEEN TO_DATE('06/20/2016','YYYYMMDD') AND TO_DATE('01/23/2017','YYYYMMDD') 
     WHEN ('06/20/2016'!='' AND '01/23/2017'=='') 
     THEN HIRE_DATE >=TO_DATE('06/20/2016','YYYYMMDD') 
     WHEN ('06/20/2016'=='' AND '01/23/2017'!='') 
     THEN HIRE_DATE <=TO_DATE('01/23/2017','YYYYMMDD') 
    END) 

我试着去创建一个搜索查询,将搜索:名字完全一致,姓氏部分匹配,电子邮件精确匹配,从日期间的数据,如果既从,并是迄今为止 目前它会返回这些日期之间的数据 如果从它是唯一的礼物它将返回数据的日期大于从 如果是唯一的礼物它将返回数据与日期小于日期 我怎么能实现这一目标?我过滤的数据是从我的jsp页面传递给我的DAO类搜索与Oracle数据库过滤查询

回答

0

尝试是这样的:

SELECT * FROM EMPLOYEES 
    WHERE (1 = 1 OR FIRST_NAME = 'renz') 
    AND (1 = 1 OR LAST_NAME LIKE '%t%') 
    AND (1 = 1 OR EMAIL = 'ASD') 
    AND HIRE_DATE BETWEEN NVL(TO_DATE(:FROM_DT, 'YYYYMMDD'), HIRE_DATE) 
         AND NVL(TO_DATE(:TO_DT,'YYYYMMDD'), HIRE_DATE) 
; 
+0

先生说这个日期是从jsp的用户输入如何将它放在:FROM_DT – healer

+0

:fron_dt是一个绑定变量的占位符。我建议你研究如何使用JSP中的绑定变量(自2002年以来我还没有这样做,所以我不记得)。此外,如果您使用文字日期字符串而不是:from_dt,则我建议的方法(或类似方法)仍应可行。 –

+0

我通常首先在SQL * Plus或TOAD中首先尝试这些想法,以确保SQL语法按预期工作,然后切入代码。 –

0

使用下面的查询:使用零

SELECT * 
    FROM employees e 
WHERE e.first_name = NVL(:first_name, e.first_name) 
    AND e.last_name LIKE NVL(:last_name, e.last_name) 
    AND e.email = NVL(:email, e.email) 
    AND e.hire_date BETWEEN NVL(:start_date, e.hire_date) 
         AND NVL(:end_date, e.hire_date) 

查询可以执行或更多参数。