我想知道一个数字中有多少个实际使用的小数位.

例如,如果我有0.604,它将是2个十进制,如果我有0.64,它将是3个十进制. 但如果我搜索第一个零,它会得到6到4之间的0.我试着用Right从右0开始搜索,但没有奏效.

为什么会这样?因为我需要知道我需要乘以小数的多少才能得到一个整数,但同时我需要知道这个0的数字,所以我放在了另一个字段中.

例如,如果我得到0.64,我将乘以100,所以我将在一个域中得到64,在另一个域中得到100. 如果我有0.604,我将乘以1000,所以我将在一个领域有604,在另一个领域有1000.

我正在从旧的ERP迁移到SAP.

我正在try 的指令

declare @val decimal(10,6),
        @var varchar(50),
        @point int,
        @zero int,
        @calc int,
        @UMREZ int,
        @UMREN int

set @val = 0.604 
set @var = trim(str(@val, 10, 10))
set @point = cast(CHARINDEX('.', @var) as int)
set @zero = cast(right(CHARINDEX('0', @var, @point), 8) as int)
set @calc = @zero - @point - 1

set @umrez = case when @calc = 0 then 1 
                  when @calc = 1 then 10 
                  when @calc = 2 then 100
                  when @calc = 3 then 1000
                  when @calc = 4 then 10000
                  when @calc = 5 then 100000
                  when @calc = 6 then 1000000
         end
set @UMREN = @val * @UMREZ

select @var, @point, @zero, @calc, @UMREZ, @UMREN

推荐答案

一种方法是将小数点变为REVERSE,然后使用patindex

SELECT POWER(10, PATINDEX('%.%', REVERSE(val)) - PATINDEX('%[^0]%', REVERSE(val)))
from 
(values(0.604000),
       (0.600000),
       (0.000000),
       (4.000000)
)v(val)

如果您使用的是decimal(x, 6),并且不必担心它在future 会发生变化(例如,这是一次性任务),则可以用7替换PATINDEX('%.%', REVERSE(val)).

Fiddle

Sql相关问答推荐

错误ORA-00908:通过全能自动化,缺少PLSQL编译器的关键字

如何查询未命名对象的SON数组

SQL查询以创建手头的流动余额?

帮助修复查询以识别SQL DW中数据中的递归关系

PostgreSQL:获取每家店铺收入最高的员工

SQL更新,在2个额外的表上使用内部连接

用相同值更新行

在多个联合中使用相同的SELECT SQL查询

计算分段的总权重

更新其组的日期字段值小于最大日期减go 天数的记录

从数据库中查找总和大于或等于查询中的数字的数字

对多个条件的SQL进行排名

Select 列组(按同一表格中的另一列分组)Laravel 10

MS Access问题查询中的自定义字段

在UNION查询中查找MIN

如果另一个表中不存在值列,则插入失败

显示十进制列,但尽可能显示为整数

当我返回 sql 列时,有没有办法只反转数字? ( hebrew )

Spark / Hive:如何获取列中正值的百分比?

为数组中的每个元素从表中收集最大整数