1

我正在尝试使用绑定变量在 sql 查询中传递强制和可选参数。

像这样的条件,如果我输入(在 WHERE CLAUSE 中)强制参数(带有一些值)和可能是 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 回答