IF end_time IS NULL THEN '500';
Просто, чтобы сделать его более ясным, «500» не числа скорее строка, поскольку он заключен в одиночных кавычек.
Теперь, end_time
есть. DATE тип данных или метка времени, в идеале. Итак, 500
не имеет смысла. Вы должны преобразовать его в соответствующий тип, будь то 500: дней, часов, минут, секунд, доли секунды.
Как и в другом ответе, предлагается использовать NVL(end_time, 500)
, это не имеет никакого смысла. Что означает 500 - a date
? Применяя NVL, необходимо, однако, вы должны преобразовать его в требуемое значение, иначе это два разных типа данных и Oracle этого не допустит.
UPDATE
На мой взгляд,
Разница между двумя датами дает число дней с точностью секунд конвертируются обратно в дни. Но разница между произвольным числом и датой не имеет смысла.
Нанести 'NVL' с надлежащим преобразования на' end_time'. См. Мой ответ. –
Что должно быть 500 (или 500)? Минимум что? У вас есть несколько столбцов в списке выбора из '*', вы не выбираете разницу; поэтому он должен заменить одно из значений столбца? Или, если конечное время равно нулю, тогда предположим, что разница равна 500, поэтому эти строки включены в результирующий набор - в этом случае не будет ли значение больше 1? Хотя это было бы еще проще с условием «или». Не совсем понятно, что вы пытаетесь сделать. –