Oracle11g 查询以检查任何具有空值的列
如果查询中Oracle11g 查询以检查任何具有空值的列,oracle11g,Oracle11g,如果查询中ptr\u实际值\u dt有一些值,如何将ptr\u预测值\u dt显示为空,否则显示ptr\u预测值\u dt 请建议如何在Oracle中编写查询 SELECT MAX (a.ptr_planned_dt) AS ptr_planned_dt, MAX (a.ptr_forecast_dt) AS ptr_forecast_dt, MAX (a.ptr_actual_dt) AS ptr_actual_dt FROM ptr_details a
ptr\u实际值\u dt
有一些值,如何将ptr\u预测值\u dt
显示为空,否则显示ptr\u预测值\u dt
请建议如何在Oracle中编写查询
SELECT MAX (a.ptr_planned_dt) AS ptr_planned_dt,
MAX (a.ptr_forecast_dt) AS ptr_forecast_dt,
MAX (a.ptr_actual_dt) AS ptr_actual_dt
FROM ptr_details a
您可以使用NVL2-NVL2(值,如果不为空则返回值,如果为空则返回值)
或nvl和解码或case的组合
e、 g
你说你有两个问题,但对我来说似乎是一样的。如果这是一个Oracle问题,为什么你要使用标签“mysql”?意思是如果ptr_forecast_dt为空,那么应该打印ptr_actual_dt,否则使用
decode()打印ptr_forecast_dt
function或searchedcase
expression。您能告诉我如何在上述查询中使用case吗?如何在上述查询中使用case?我倾向于建议使用COALESCE
overNVL
或NVL2
。它有几个优点:它是ANSI标准;它接受n个参数,因此它比以前的任何一个函数都有更多的功能;而且它支持短路评估,所以在第一个非空值之后的任何计算都被跳过。我同意这一点-我只是建议使用nvl2,因为我最初误读了这个问题,但它提供了nvl和解码的良好组合。在ANSI sql的情况下,使用COALESCE
select MAX (a.ptr_planned_dt) AS ptr_planned_dt,
nvl2(max(a.ptr_actual_dt),max(a.ptr_forecast),null) as ptr_forecast_dt,
MAX (a.ptr_actual_dt) AS ptr_actual_dt
from ptr_details a