0

我正在使用此查询来获取活动开始时间和结束时间之间差异的结果。在结束时间为空的情况下,我想将最小值设置为 500。请建议和帮助!

select * from table
   where (end_time - start_time) * 24 * 60 > 1, 
  IF end_time IS NULL THEN '500';
4

3 回答 3

0

IF end_time 为 NULL THEN '500';

为了更清楚起见, '500' 不是数字而是字符串,因为它包含在单引号内。

现在,end_time是。DATE数据类型或时间戳,理想情况下。所以,500没有意义。您必须将其转换为适当的类型,无论 500 是天、小时、分钟、秒、秒的分数

与其他答案一样,建议使用NVL(end_time, 500),这是没有意义的。是什么500 - a date意思?应用NVL是必要的,但是,您必须将其转换为所需的值,否则这是两种不同的数据类型Oracle不允许这样做。

更新

在我看来,

两个日期之间的差异将天数精确到秒转换回天。但是,任意数字和日期之间的差异是没有意义的。

于 2015-02-05T13:57:23.130 回答
0

所以这是你的查询:

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;
于 2015-02-05T13:46:04.743 回答
0

我假设 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;

于 2015-02-06T11:47:34.340 回答