如何从表列中获取最低和最高日期?

我试图从表列中获取最低日期和最高日期。为此,我正在使用以下 SQL 查询。

select MIN(trunc(TO_DATE(MOD_BEGIN, 'YYYYMMDDHH24MISS'))) AS MIN_DATUM
     , MAX(trunc(TO_DATE(MOD_END, 'YYYYMMDDHH24MISS'))) AS MAX_DATUM
from   V_IPSL_PPE_MUC_AZEIT;

仅供参考 - 在 PL/SQL 中使用此查询。从上面查询的输出中,我将生成日期范围。我们正在使用oracle 19c。

但问题是这些列MOD_BEGINMOD_END只有很少的无效值(例如:000000.01亿),由于这个当我执行上面的查询,收到错误消息说:

ORA-01843:无效月份
ORA-02063:来自 L_IPSL_PPE_MUC 的前一行

我们不允许清除这些无效数据。

如何处理这种情况?

回答

如果您运行的是 Oracle 12.2 或更高版本,这可能是一个方便使用的地方ON CONVERSION ERROR

select 
    trunc(min(to_date(mod_begin default null on conversion error, 'yyyymmddhh24miss'))) as min_datum,
    trunc(max(to_date(mod_end   default null on conversion error, 'yyyymmddhh24miss'))) as max_datum 
from v_ipsl_ppe_muc_azeit;

当遇到无效日期时,to_date()返回null而不是错误;然后周围的聚合函数忽略null值。

  • Perfect! Thanks a lot. We are on 19c, it worked.

以上是如何从表列中获取最低和最高日期?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>