我使用此查询来获取活动的开始时间和结束时间之间差异的结果。如果结束时间为空,我想将最小值设为500.请建议并帮助!!
select * from table
where (end_time - start_time) * 24 * 60 > 1,
IF end_time IS NULL THEN '500';
答案 0 :(得分: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;
答案 1 :(得分:0)
IF end_time IS NULL那么' 500';
只是为了说清楚,' 500'不是数字而是字符串,因为它包含在单引号中。
现在,end_time
是。理想情况下, DATE 数据类型或时间戳。所以,500
毫无意义。您必须将其转换为适当的类型,无论500是天,小时,分钟,秒,小数秒。
与其他答案一样,建议使用NVL(end_time, 500)
,这没有任何意义。 500 - a date
是什么意思?应用 NVL 是必要的,但是,您必须将其转换为所需的值,否则两种不同的数据类型和 Oracle 赢得&#39 ;允许它。
更新
在我看来,
两个日期之间的差异给出了转换回天数的精度秒数。但是,任意数字和日期之间的差异是没有意义的。
答案 2 :(得分: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;