确定列上使用的MAX十进制比例

Bo *_*son 14 sql t-sql sql-server precision decimal

在MS SQL中,我需要一种方法来确定某个十进制列的行使用的最大比例.

例如,Col1 Decimal(19,8)的比例为8,但我需要知道是否所有8个实际上都在使用,或者是否只使用了5,6或7.

样本数据:

123.12345000
321.43210000
5255.12340000
5244.12345000
Run Code Online (Sandbox Code Playgroud)

对于上面的数据,我需要查询返回5,或123.12345000或5244.12345000.

我不关心性能,我确定全表扫描会有序,我只需要运行一次查询.

Mic*_*son 10

不漂亮,但我认为它应该做的伎俩:

-- Find the first non-zero character in the reversed string...
-- And then subtract from the scale of the decimal + 1.
SELECT 9 - PATINDEX('%[1-9]%', REVERSE(Col1))
Run Code Online (Sandbox Code Playgroud)


And*_*y M 8

我更喜欢@Michael Fredrickson的答案,我只是将其作为特定案例的替代方案,其中实际规模未知但肯定不超过18:

SELECT LEN(CAST(CAST(REVERSE(Col1) AS float) AS bigint))
Run Code Online (Sandbox Code Playgroud)

请注意,尽管此处有两个显式CAST调用,但查询实际上还执行了两次隐式转换:

  1. 作为REVERSE的参数,Col1转换为字符串.

  2. bigint被用作LEN的参数之前强制转换为字符串.