提问人:Naveen 提问时间:11/14/2023 更新时间:11/14/2023 访问量:38
如何从 oracle 中的 OR 条件获取数据
How to get the data from OR condition in oracle
问:
我有三个参数。Fromdate、todate 和保单编号。在这三个参数中,fromdate 和 todate 是必需的,policy number 是可选参数。
- 如果我只选择从日期到日期(没有选择保单编号),我会得到日期范围内的所有保单编号详细信息。 2.如果我选择从日期,到日期和保单号码。我应该只在日期范围内获得该特定保单编号的详细信息。但是在日期范围内获取所有保单编号详细信息
我正在获取所有保单号码的详细信息。但我希望特定的保单号码详细信息在此处输入图像描述
答:
目前,您有一个 这意味着日期范围或保单编号可以匹配(但也请参阅优先规则)。OR
使用固定值,您将需要:
WHERE CP.PAYMENT_REF_DATE >= DATE '2021-10-01'
AND CP.PAYMENT_REF_DATE < DATE '2023-11-14'
AND pm.policy_number='605000057'
我已将您的字符串值更改为实际日期,因此您不依赖于隐式转换和 NLS 设置;并将范围的末尾更改为第二天 - 这意味着您不需要列值。无论如何,您不需要“开始”日期;但是,如果对任何一个列执行此操作,则意味着由于应用了该函数,它无法在该列上使用普通索引。'01-10-2023'
TRUNC()
更一般地说,如果将值作为参数传入,则可以执行以下操作:
WHERE CP.PAYMENT_REF_DATE >= P_FROM_DATE
AND CP.PAYMENT_REF_DATE < P_TO_DATE
AND (P_POLICY_NUMBER IS NULL OR pm.policy_number = P_POLICY_NUMBER)
提供参数值,作为等效的 、 和 的 null 或所需的特定策略。如果为 null,则条件的第一部分始终匹配,你将看到任何策略的数据(当然,受日期范围的限制);如果它不是 null,则 的第二部分将仅与你提供的特定策略匹配,因此你将只看到该策略的数据。P_FROM_DATE
DATE '2023-10-01'
P_DATE_TO
DATE '2023-11-14'
P_POLICY_NUMBER
OR
OR
如果仍想像在原始查询中一样传递结束日期,则可以向其添加一个:DATE '2023-11-13'
WHERE CP.PAYMENT_REF_DATE >= P_FROM_DATE
AND CP.PAYMENT_REF_DATE < P_TO_DATE + 1
AND (P_POLICY_NUMBER IS NULL OR pm.policy_number = P_POLICY_NUMBER)
这仍然会为您提供 13 日任何时间的所有详细信息。
CP.PAYMENT_REF_DATE < P_TO_DATE + 1
等效于,但不需要将函数应用于该列中的每个日期值以查找匹配的行。TRUNC(CP.PAYMENT_REF_DATE) <= P_TO_DATE
评论
OR
AND