Redshift中如何对小数部分大于0.3的浮点数向上取整?
Redshift SQL 实现自定义取整逻辑
针对你需要的小数部分大于0.3向上取整,小于等于0.3向下取整的需求,可以用两种方式实现:
方法一:CASE 条件判断(直观易懂)
通过提取小数部分,结合FLOOR函数做分支判断:
SELECT weight, CAST( CASE WHEN (weight - FLOOR(weight)) > 0.3 THEN FLOOR(weight) + 1 ELSE FLOOR(weight) END AS INT ) AS adjusted_weight FROM your_table;
逻辑说明:
FLOOR(weight)取weight的整数部分(向下取整)weight - FLOOR(weight)得到小数部分- 小数部分>0.3时,整数部分加1;否则直接取整数部分
方法二:CEIL 函数简化写法(更简洁)
利用CEIL(向上取整)函数,通过对原数值做偏移实现需求:
SELECT weight, CAST(CEIL(weight - 0.3) AS INT) AS adjusted_weight FROM your_table;
逻辑说明:
- 对weight减去0.3后再向上取整:
- 当原数小数部分>0.3时,
weight-0.3的结果会比原数整数部分大0.01及以上,CEIL后得到原整数部分+1 - 当原数小数部分≤0.3时,
weight-0.3的结果≤原数整数部分,CEIL后得到原整数部分
- 当原数小数部分>0.3时,
测试你的数据,两种方法都会得到如下结果:
| weight | adjusted_weight |
|---|---|
| 2.31 | 3 |
| 2.50 | 3 |
| 2.76 | 3 |
| 2.45 | 3 |
内容的提问来源于stack exchange,提问作者nomnom3214
相关产品推荐
相关产品推荐

