下面显示了一个可执行语句: 成功的尝试:
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 如果我想从上面的结果中总结我的时间,将它转换成数字是否会很乏味?
由于
答案 0 :(得分:1)
首先,|| 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
。