Использование случая, когда для вставки значений - PullRequest
0 голосов
/ 18 ноября 2011

Ниже показан исполняемый оператор: Успешная попытка:

INSERT INTO Personnel_Assignment (DATE, testno, Hours) 
SELECT '21-OCT-2011', '12345', 
   CASE
      WHEN Extract(day From(S.ENDTIME-S.STARTTIME) ) >= 1 
         THEN (Extract(Day From(S.ENDTIME-S.STARTTIME) ) * 24 
            + Extract(Hour From(S.ENDTIME-S.STARTTIME) ) )
      WHEN S.endtime IS NULL
         THEN NULL
      ELSE
         Extract(Hour From(S.ENDTIME-S.STARTTIME) ) )
      ||'hrs' End ||
      Extract(Minute From(S.ENDTIME-S.STARTTIME) ) || 'Min' As Hours 
FROM Schedule S`

Обратите внимание, что тип данных для конечного и начального времени является меткой времени с часовым поясом в этом формате:

Nls_Timestamp_Tz_Format='HH24:MI TZR'

Простовопрос, который я хотел бы задать: мой тип данных для часов varchar2. И если я хочу в итоге подвести итог моих часов из результатов, приведенных выше, было бы утомительно преобразовывать их в число?

Спасибо

1 Ответ

1 голос
/ 18 ноября 2011

Прежде всего, || Else не имеет смысла. Часть после || должна быть другим выражением для объединения.

Во-вторых, вы, конечно, можете вкладывать case выражения, но в вашем случае вам это не нужно. Одно выражение case может иметь несколько ветвей when / then в форме case when [condition_A] then [expression_if_A_is_true] when [condition_B] then [expression_if_A_is_false_and_B_is_true] else [expression_if_A_and_B_are_both_false] end.

...