【问题标题】:How to count number of digits after a decimal place?如何计算小数点后的位数?
【发布时间】:2015-08-03 22:52:06
【问题描述】:

我是编写查询的新手。我需要一个查询来告诉小数点后的位数。

例如:

1001.00 = 0 digits after decimal
1001.01 = 2 digits after decimal
1001.010 = 2 digits after decimal

我该怎么做?

【问题讨论】:

  • (1) 请适当标记您的问题。 MySQL 和 Oracle 是两个不同的数据库。 (2) 使用浮点表示,您的问题没有正确答案。 1001.00 与 1001.9999999999 相同......
  • 假设值存储为浮点数,问题没有意义。

标签: mysql sql oracle


【解决方案1】:

甲骨文解决方案

这可以通过多种方式实现,其中一种如下,

SELECT
length((1001.00) - trunc(1001.00)) - 1 as digits_after_decimal
FROM
dual;
SELECT
length((1001.01) - trunc(1001.01)) - 1 as digits_after_decimal
FROM
dual;    
 SELECT
length((1001.010) - trunc(1001.010)) - 1 as digits_after_decimal
FROM
dual;

【讨论】:

  • 我相信发帖者在给定的场景中寻找 3 个不同的值。如果这就是结果,你能澄清一下吗?
  • 是的,我的第二个查询将给出与给定场景所需的输出相同的输出。
【解决方案2】:

oracle 简单示例:

select length(substr(to_char(999999.564654645),instr(to_char(999999.564654645), ',')+1, 16)) || ' digits after decimal' from dual

【讨论】:

  • 我相信substring_length参数(substr的第三个参数)可以省略。
【解决方案3】:

这个在 MySQL 中对我有用的解决方案,应该适用于任何数字字段:

SELECT char_length(field + 0) - char_length(floor(field + 0)) - 1 as digits_after_decimal;

本质上,我正在寻找数字字符串的整个表示的字符数,然后删除小数以获取小数中所有 not 的字符长度,并比较差异。

例如,如果您输入 1039.320293

SELECT char_length(1039.320293); #returns 11
SELECT floor(1039.320293); #returns 1039
SELECT char_length(floor(1039.320293)) #returns 4

初始解决方案将返回 6(因为您还必须删除小数位字符)。

“加零”将在发言前从数字中删除尾随零,这应该解决您添加的情况。

【讨论】:

  • 如果您还添加一点解释您的查询正在做什么,那就太好了。我看到您正在使用char_length 函数来查找十进制值的字符串表示的长度,然后减去下限值的字符串长度。减一用于调整小数点字符“。”在字符串表示中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
  • 2017-02-14
  • 1970-01-01
相关资源
最近更新 更多