如何从数字中提取千位整数部分及剩余数值?
获取数字千位以外剩余值的最优方案
要提取任意正整数去掉千位及以上部分后的剩余数值,最优且通用的解法是使用取模运算MOD(number, 1000),这个公式能完美适配所有位数的正整数场景,完全覆盖你提到的550、12501、50这类不同长度的数字。
为什么这个公式靠谱?
取模运算的核心是计算一个数除以另一个数后的余数,当我们对1000取模时,恰好会得到原数除以1000后剩下的千位以下部分,完全匹配你要的剩余数值需求。
各类场景测试示例(适配Oracle环境)
以下是针对不同数字的实际测试代码(和你之前用的DUAL表环境一致):
- 针对
1550:
返回结果:SELECT MOD(1550, 1000) FROM DUAL;550 - 针对
12501:
返回结果:SELECT MOD(12501, 1000) FROM DUAL;2501 - 针对
50:
返回结果:SELECT MOD(50, 1000) FROM DUAL;50 - 额外测试边界值
1000:
返回结果:SELECT MOD(1000, 1000) FROM DUAL;0(逻辑合理,千位为1时剩余部分为0)
和现有千位提取公式的配合使用
如果需要同时获取千位整数部分和剩余数值,可以把两个公式整合到同一条查询中:
SELECT TRUNC(target_number/1000) AS 千位整数部分, MOD(target_number, 1000) AS 剩余数值 FROM DUAL;
只需把target_number替换成你的目标数字或字段名即可。
内容的提问来源于stack exchange,提问作者syedcic




