如何从表列中获取最低和最高日期?
我试图从表列中获取最低日期和最高日期。为此,我正在使用以下 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_BEGIN,MOD_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.