1

バインド変数を使用して、SQL クエリで必須およびオプションのパラメーターを渡そうとしています。

のような条件、(WHERE 句で) 必須パラメーター (何らかの値を持つ) と EMPTY の可能性があるオプションのパラメーター (空白であることを意味します) をバインド変数として入力すると、必須パラメーター条件を満たす行がいくつか表示されます。ただし、必須パラメーターを入力せず、オプションのパラメーターのみを入力した場合、行は表示されません。必須パラメータが空であるためです。これを達成するにはどうすればよいですか:私のクエリは次のとおりです:

select employee_id,hire_date 
from employees
where employee_id between  :from_emp_id   and  :to_emp_id      
  and  hire_date.......?(what?)**

Hire_DATE をどうすればよいですか。hire_date が空の場合は、sysdate に置き換えられ、行が返されます。

4

3 に答える 3

4
...
and hire_date = nvl( :hire_date, hire_date)

これは、hire_dateが:hire_dateパラメーターと一致する場合、または:hire_dateがnull/空の値として渡された場合にtrueと評価される式です。

于 2012-04-27T07:27:23.780 に答える
0

これを実現するために CASE を使用できます。

create table Employee (employee_id int, hire_date datetime null)

insert into Employee (employee_id, hire_date)
select 1, '2011-01-01'
union all
select 2, '2012-03-01'
union all
select 3, '2011-10-01'
union all
select 4, null

declare @hiredate datetime

set @hiredate = '2011-10-01 00:00:00.000'

select * from Employee where isnull(hire_date, GETDATE()) = case 
when (@hiredate is null) then isnull(hire_date, GETDATE()) Else @hiredate End

set @hiredate = null
select * from Employee where isnull(hire_date, GETDATE()) = case 
when (@hiredate is null) then isnull(hire_date, GETDATE()) Else @hiredate End
于 2012-04-27T07:40:46.853 に答える
0

Hire_date が NOT NULL フィールドであると仮定すると、次のことができます。

and (:hire_date is null or hire_date = :hire_date)
于 2012-04-27T11:51:12.790 に答える