Create table testabc (
A Number,
B Date
);
Insert into testabc (a, B) values (1, TO_DATE (1-MAY-2010/, DD-MON-YYYY/HH24: MI ));
Insert into testabc (a, B) values (1, TO_DATE (2-MAY-2010/, DD-MON-YYYY/HH24: MI ));
Insert into testabc (a, B) values (1, TO_DATE (3-MAY-2010/, DD-MON-YYYY/HH24: MI ));
Insert into testabc (a, B) values (1, TO_DATE (4-MAY-2010/, DD-MON-YYYY/HH24: MI ));
Insert into testabc (a, B) values (1, TO_DATE (5-MAY-2010/, DD-MON-YYYY/HH24: MI ));
Insert into testabc (a, B) values (1, TO_DATE (6-MAY-2010/, DD-MON-YYYY/HH24: MI ));
Select a, B, decode (sign (B-TO_DATE (3-MAY-2010/00:00, DD-MON-YYYY/HH24: MI),-1, his, 1, cur, his) as type from testabc;
Select a, B, case when B <= TO_DATE (3-MAY-2010/00:00, DD-MON-YYYY/HH24: MI) then his else cur end type from testabc;
Drop table testabc;
In theory, case when will have a better performance.