Oracle SQL中如何将数值取整至0.05的倍数?
Oracle SQL实现指定数值调整逻辑
首先,咱们先明确你要的规则:将数值向上舍入到最接近的0.05的倍数,如果数值本身已经是0.05的整数倍(比如2.10、2.50),则保持不变。你的几个测试例子完全贴合这个规则:
- 2.39 → 向上取到最近的0.05倍数是2.40
- 4.66 → 向上取到最近的0.05倍数是4.70
- 2.11 → 向上取到最近的0.05倍数是2.15
- 2.10、2.50本身就是0.05的倍数,所以保持原样
在Oracle SQL里,用CEIL()函数就能轻松实现这个逻辑,具体思路很简单:
- 把目标数值乘以20(因为0.05 = 1/20,乘以20后就能把0.05的倍数转化为整数)
- 用
CEIL()对结果向上取整(不管小数部分是多少,都直接进一位到下一个整数) - 再把结果除以20,还原回原数值的量级
具体SQL代码
假设你的数值列名为original_num,表名为your_table,可以这样写:
SELECT original_num, CEIL(original_num * 20) / 20 AS adjusted_num FROM your_table;
验证你的测试用例
咱们用你给出的数值跑一遍,结果完全符合预期:
CEIL(2.39 * 20) / 20 = CEIL(47.8) /20 = 48/20 = 2.40CEIL(4.66 *20)/20 = CEIL(93.2)/20 =94/20=4.70CEIL(2.11*20)/20=CEIL(42.2)/20=43/20=2.15CEIL(2.10*20)/20=CEIL(42)/20=42/20=2.10CEIL(2.50*20)/20=CEIL(50)/20=50/20=2.50
额外优化:强制显示两位小数
如果需要确保结果始终显示为两位小数(比如避免出现2.4,而是强制显示2.40),可以用TO_CHAR()做格式化:
SELECT original_num, TO_CHAR(CEIL(original_num * 20) / 20, 'FM9999999.99') AS adjusted_num_formatted FROM your_table;
这里的FM修饰符是用来去掉数值前多余的空格,让输出更整洁。
内容的提问来源于stack exchange,提问作者legendefs
相关产品推荐
相关产品推荐

