我有这个表包含:
id number = unique per user
code = c (calendar) or f (fiscal)
start_month = 1 to 12
date_created
我如何解码提交期限:
e.g。如果用户被标记为C并且start_month = 1,则第一个qtr的归档时间为“3”,第二个qtr为6个,第三个季度为9个,第四个季度为12个。
如果用户被标记为F并且start_month = 2,那么归档期将是第1个qtr = 4,第2个qtr = 7,第3个qtr = 10,第4个qtr = 1
答案 0 :(得分:0)
我的第一个想法是将start_month转换为日期并使用add_months(),但当然如果你不能使用case,那么你的版本早于8i,你也将无法使用add_months()。
任何数学家都会因为以下使用div和mod 13而感到震惊,但如果我正确理解你想要实现的目标,我认为这可以在Oracle 7和旧版本中使用:< / p>
select decode ( code, 'c', 3,
'f', trunc((2+start_month)/13) + mod((2+start_month),13)) as qtr1,
decode ( code, 'c', 6,
'f', trunc((5+start_month)/13) + mod((5+start_month),13)) as qtr2,
decode ( code, 'c', 9,
'f', trunc((8+start_month)/13) + mod((8+start_month),13)) as qtr3,
decode ( code, 'c', 12,
'f', trunc((11+start_month)/13) + mod((11+start_month),13)) as qtr4,
etc...