我正在使用此查询来获取活动开始时间和结束时间之间差异的结果。在结束时间为空的情况下,我想将最小值设置为 500。请建议和帮助!
select * from table
where (end_time - start_time) * 24 * 60 > 1,
IF end_time IS NULL THEN '500';
IF end_time 为 NULL THEN '500';
为了更清楚起见, '500' 不是数字而是字符串,因为它包含在单引号内。
现在,end_time
是。DATE数据类型或时间戳,理想情况下。所以,500
没有意义。您必须将其转换为适当的类型,无论 500 是天、小时、分钟、秒、秒的分数。
与其他答案一样,建议使用NVL(end_time, 500)
,这是没有意义的。是什么500 - a date
意思?应用NVL是必要的,但是,您必须将其转换为所需的值,否则这是两种不同的数据类型,Oracle不允许这样做。
更新
在我看来,
两个日期之间的差异将天数精确到秒转换回天。但是,任意数字和日期之间的差异是没有意义的。
所以这是你的查询:
select * from table where (end_time - start_time) * 24 * 60 > 1;
但是您想将 null end_time 视为 500。因此使用 NVL 或 COALESCE 将 null 替换为 500:
select * from table where (nvl(end_time,500) - start_time) * 24 * 60 > 1;
我假设 start_time 和 end_time 列具有数字作为数据类型,对于此计算,您需要选择这些特定列而不是全部 (*)。比较在 where 子句中,这在 oracle11 中有效。
select ((NVL(END_TIME, 500)-START_TIME) * 24 * 60) from TABLE_NAME where ((NVL(END_TIME, 500)-START_TIME) * 24 * 60) > 1;