Sql server 查找小数中刻度的最大非零位置

Sql server 查找小数中刻度的最大非零位置,sql-server,Sql Server,我有一个场景,在这个场景中,我需要一个sql查询来找出使用sql Server的数据库中每个十进制列的比例中的MaxNonZeroPosition。 对于ex:43321.70090100,这里的最大非零位置是6。为了降低复杂性,我将部分放在子查询中。这将为您提供您需要的: DECLARE @T DECIMAL(20, 12) = 43321.70090100 SELECT LEN(CONVERT(VARCHAR(20), SS)) - PATINDEX('%[^0]%', REVERSE(

我有一个场景,在这个场景中,我需要一个sql查询来找出使用sql Server的数据库中每个十进制列的比例中的MaxNonZeroPosition。
对于ex:43321.70090100,这里的最大非零位置是6。

为了降低复杂性,我将部分放在子查询中。这将为您提供您需要的:

DECLARE @T DECIMAL(20, 12) = 43321.70090100

SELECT  LEN(CONVERT(VARCHAR(20), SS)) - PATINDEX('%[^0]%', REVERSE(SS))
FROM    (
            SELECT  @T Ori
            ,       SUBSTRING(CONVERT(VARCHAR(20), @T), CHARINDEX('.', @T), LEN(@T)) SS
        ) Sub
另一种方法

declare @test decimal(20, 12) = 221123.812000430035000
select len(replace(@test, 0, ' ')) - charindex('.', @test)

6是怎么来的?你能解释一下吗?所以我们在小数点的第二部分有更好的想法。70090100,数字1是最大非零数字。。因为它位于位置6,所以它变为MaxNonZeroPosition。如果我给另一个EX:221123.812000 4300 35000,这里5是在位置12,是Max NoNoRoDigIt,因此12是Max非零位。如果HoneyBadger或PSK帮助你,请考虑。接受答案会奖励贡献者,帮助其他人找到有效的解决方案,在这种情况下,解决了一场争论。对于43321.71290100,它也返回了6,这在我看来是不正确的。最后一个非零字符是相同的,不管它前面是什么。这段代码对于十进制值似乎工作正常。如何使用此代码在给定表中查找十进制类型列的MaxNonZeroPosition。在子查询中添加from子句,并选择所需的列而不是变量。非常好,您甚至不需要rtrim,因为尾部空格被忽略。您是对的!谢谢忘了吧。已更新查询