我有三个参数。Fromdate,todate和policy number。其中fromdate和todate是必填参数,policy number是可选参数。
1.如果我只选择from date和to date(不选择policy number),我将获得daterange中的所有policy number详细信息。2.如果我还选择from date、to date和policy number,我将只获得daterange中的特定policy number详细信息。但获得daterange中的所有policy number详细信息
我得到了所有的保险单号码的细节。但我期待特定的保险单号码细节enter image description here
1条答案
按热度按时间c86crjj01#
目前,您有一个
OR
,这意味着日期范围或策略编号可以匹配(但也请参阅优先级规则)。使用固定值,您需要:
字符串
我已经将
'01-10-2023'
这样的字符串值更改为实际日期,这样你就不会依赖于隐式转换和NLS设置;并将范围的结束更改为第二天-这意味着你不需要TRUNC()
列值。但是对任何一个都这样做意味着它不能在该列上使用普通索引,因为函数正在应用。更一般地说,如果你将值作为参数传递,你可以这样做:
型
提供
P_FROM_DATE
参数值作为DATE '2023-10-01'
的等效值,P_DATE_TO
作为DATE '2023-11-14'
,P_POLICY_NUMBER
作为所需的特定策略。如果为null,则OR
条件的第一部分始终匹配,您将看到任何策略的数据(当然,取决于日期范围);如果它不为空,那么OR
的第二部分将只匹配您提供的特定策略,因此您将只看到该策略的数据。如果你仍然想像在原始查询中那样将结束日期作为
DATE '2023-11-13'
传递,那么你可以向它添加一个:型
仍然可以给予13日任何时候的所有细节
CP.PAYMENT_REF_DATE < P_TO_DATE + 1
等效于TRUNC(CP.PAYMENT_REF_DATE) <= P_TO_DATE
,但不需要将该函数应用于该列中的每个日期值以查找匹配的行。