Oracleにて5ずつ切り上げするアルゴリズムをお教えいただきたいです。
値には0~60しか入りません
【例】
<値> → <求める結果>
0 → 0
1 → 5
5 → 5
7 → 10
17 → 20
20 → 20
エレガントでない書き方だとこんな感じでしょうか
もっとエレガントな書き方はないでしょうか
BEGIN
IF RIGHT(num,1) IN (0,5) THEN
NULL;
ELSIF RIGHT(num,1) >= 4
num := FLOOR(num) + 5;
ELSIF RIGHT(num,1) <= 9
num := ROUND(num,1);
ELSE
END IF;
NULL;
END;
>>質問内容に誤りがありました。
・値は hhmm の形式で入るものになります。
【例】
9時44分 → 944
17時9分 → 1709
・このうち、分数だけ5ずつ切り上げしたいです。
【例】
9時44分 → 945
17時9分 → 1710
9時40分 → 940
17時5分 → 1705
5 で割って小数点以下を切り上げて 5 をかける。
ありがとうございます!
ググっても全然出てこなかったので助かりました!
> ・値は hhmm の形式で入るものになります。
算数の問題ですよね?
自分でできると思いますが、考えてみましたか?
考えてみましたがこんな感じになります。SUBSTRで無理やりmmの箇所を抜き出して計算している状態です。
(num - SUBSTR(num , -2)) + CEIL(SUBSTR(num , -2) / 5) * 5
自分なりにググって、考えた後で質問はしているつもりです。
いやググらなくても普通に計算すればいいと思います。
普通に計算ができませんでした・・・(-_-;)
四則演算と切り上げ切り捨てだけでできるので、できなかったという過去形を使うのではなく、少し頑張ってみてください。
さっきも書いたように算数の問題なので、小学生に負けてはいけません。
頑張ってみます。
>>本当にわかりません。これって四則演算と切り上げ切り捨てだけで出来ますか?
「5ずつ切り上げ」でググるといろいろ見つかりますけど。「全然出てこなかった」ことはないと思います。
https://www.google.com/search?q=5%E3%81%9A%E3%81%A4%E5%88%87%E3%82%8A%E4%B8%8A%E3%81%92