2015-02-05 1 views
0

Я использую этот запрос, чтобы получить результат разницы между временем начала и временем действия. Если конечное время равно нулю, я хотел поставить минимальное значение как 500. Пожалуйста, совет и помощь!SQL Command неправильно завершен (оракул 11g для окон)

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

Нанести 'NVL' с надлежащим преобразования на' end_time'. См. Мой ответ. –

+0

Что должно быть 500 (или 500)? Минимум что? У вас есть несколько столбцов в списке выбора из '*', вы не выбираете разницу; поэтому он должен заменить одно из значений столбца? Или, если конечное время равно нулю, тогда предположим, что разница равна 500, поэтому эти строки включены в результирующий набор - в этом случае не будет ли значение больше 1? Хотя это было бы еще проще с условием «или». Не совсем понятно, что вы пытаетесь сделать. –

ответ

0

Так это ваш запрос:

select * from table where (end_time - start_time) * 24 * 60 > 1; 

Но вы хотите, чтобы относиться к нулевой END_TIME, как 500. Поэтому используйте NVL или COALESCE заменить нуль 500:

select * from table where (nvl(end_time,500) - start_time) * 24 * 60 > 1; 
+0

И неправильно просто применять NVL в end_time как это. Что такое 500? Дни, часы, минуты, секунды и т. Д.? –

+0

@Lalit Kumar B: Я не знаю.Возможно, start_time и end_time удерживают n-ю минуту дня как целое число, поэтому 500 будет 500-й минутой того дня. Я не знаю, какие данные находятся в этих столбцах, я просто ответил на вопрос о том, как использовать 500 для NULL. Возможно, вы правы, хотя Фархаан Али смешивает здесь типы колонок. Мы не можем это знать. –

+0

Я бы сказал только, что способ, которым столбцы datetime оцифровываются в запросе, дает четкое представление о том, что эти столбцы являются типами данных DATE/TIMESTAMP. Я говорю это по моему опыту. Я был бы более чем счастлив, если бы OP сказал, что я ошибаюсь, так как тогда я помогу OP с дополнительной информацией о типах данных и дизайне :-) Не обижайтесь на свой пост, просто я вижу, что это гипотеза и совсем не практическая , Не возражайте, мы все учимся и обмениваемся. Вы, кажется, намного старше меня, поскольку ваши баллы указывают :-) –

0

IF end_time IS NULL THEN '500';

Просто, чтобы сделать его более ясным, «500» не числа скорее строка, поскольку он заключен в одиночных кавычек.

Теперь, end_time есть. DATE тип данных или метка времени, в идеале. Итак, 500 не имеет смысла. Вы должны преобразовать его в соответствующий тип, будь то 500: дней, часов, минут, секунд, доли секунды.

Как и в другом ответе, предлагается использовать NVL(end_time, 500), это не имеет никакого смысла. Что означает 500 - a date? Применяя NVL, необходимо, однако, вы должны преобразовать его в требуемое значение, иначе это два разных типа данных и Oracle этого не допустит.

UPDATE

На мой взгляд,

Разница между двумя датами дает число дней с точностью секунд конвертируются обратно в дни. Но разница между произвольным числом и датой не имеет смысла.

+0

.. Мне нужно поставить 500 МИНУТ как минимальное значение, если конечное время равно NULL. время начала и время окончания имеют тип данных даты .. и да, я совершенно новый для sql и oracle. Я был бы очень признателен, если бы вы могли помочь мне в этом вопросе :) –

+0

Я могу получить правильную разницу между временем начала и временем окончания в таблице, где оба они имеют значение. Проблема заключается только в том, где конец время равно NULL. –

+0

Идите с аргументом case, 'case when end_time имеет значение null, а затем 500 else (end_time - start_time) * 24 * 60 end' –

0

Я предположил, что столбцы start_time и end_time имеют номер как тип данных, для этого расчета вам нужно выбрать эти конкретные столбцы, а не все (*). Сравнение находится там, где это предложение, это работает в oracle11.

select ((NVL(END_TIME, 500)-START_TIME) * 24 * 60) from TABLE_NAME where ((NVL(END_TIME, 500)-START_TIME) * 24 * 60) > 1;

+0

я использовал этот запрос. Я получаю все результаты из таблицы, за исключением тех, где end_time имеет значение NULL –

+0

Каков тип данных в столбце end_time? – zKaj

+0

Время начала и окончания - дата Тип данных –

 Смежные вопросы

  • Нет связанных вопросов^_^