gpt4 book ai didi

sql - 如何计算 SQL 中的小数位?

转载 作者:行者123 更新时间:2023-12-03 23:12:26 27 4
gpt4 key购买 nike

我有一个 X 列,它充满了浮点数,小数位数从 0(无小数)到 6(最大值)。我可以指望没有超过 6 位小数的浮点数。鉴于此,我如何创建一个新列,以便它告诉我小数点后有多少位数字?

我看到一些线程建议我使用 CAST 将浮点数转换为字符串,然后解析字符串以计算小数点后的字符串长度。这是最好的方法吗?

最佳答案

你可以使用这样的东西:

declare @v sql_variant

set @v=0.1242311

select SQL_VARIANT_PROPERTY(@v, 'Scale') as Scale

这将返回 7 .

我试图使上述查询与 float 一起工作列,但无法按预期工作。它仅适用于 sql_variant您可以在此处看到的列: http://sqlfiddle.com/#!6/5c62c/2

所以,我开始寻找另一种方式并以此为基础 answer , 我懂了:
SELECT value,
LEN(
CAST(
CAST(
REVERSE(
CONVERT(VARCHAR(50), value, 128)
) AS float
) AS bigint
)
) as Decimals
FROM Numbers

这是一个 SQL Fiddle 来测试这个: http://sqlfiddle.com/#!6/23d4f/29

为了解决这个小怪癖,这里有一个修改版本,它将处理浮点值没有小数部分的情况:
SELECT value,
Decimals = CASE Charindex('.', value)
WHEN 0 THEN 0
ELSE
Len (
Cast(
Cast(
Reverse(CONVERT(VARCHAR(50), value, 128)) AS FLOAT
) AS BIGINT
)
)
END
FROM numbers

这是随附的 SQL Fiddle: http://sqlfiddle.com/#!6/10d54/11

关于sql - 如何计算 SQL 中的小数位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14715141/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com