Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何计算小数点后的位数?_Mysql_Sql_Oracle - Fatal编程技术网

Mysql 如何计算小数点后的位数?

Mysql 如何计算小数点后的位数?,mysql,sql,oracle,Mysql,Sql,Oracle,我不熟悉写问题。我需要一个查询,告诉小数点后的位数 例如: 如何执行此操作?对于oracle简单示例: select length(substr(to_char(999999.564654645),instr(to_char(999999.564654645), ',')+1, 16)) || ' digits after decimal' from dual ORACLE解决方案 这可以通过多种方式实现,其中一种方式如下: 此解决方案在MySQL中适用于我,并且适用于任何数字字段: SELE

我不熟悉写问题。我需要一个查询,告诉小数点后的位数

例如:


如何执行此操作?

对于oracle简单示例:

select length(substr(to_char(999999.564654645),instr(to_char(999999.564654645), ',')+1, 16)) || ' digits after decimal' from dual
ORACLE解决方案

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


此解决方案在MySQL中适用于我,并且适用于任何数字字段:

SELECT char_length(field + 0) - char_length(floor(field + 0)) - 1 as digits_after_decimal;
本质上,我希望计算数字字符串的整个表示形式的字符数,然后删除小数点以获得小数点以外的所有字符的长度,并比较差异

例如,如果将
1039.320293
作为输入:

SELECT char_length(1039.320293); #returns 11
SELECT floor(1039.320293); #returns 1039
SELECT char_length(floor(1039.320293)) #returns 4
初始解将返回6(因为您还必须删除小数点后的字符)


在发言之前,“加零”将从数字中删除尾随的零,这将解决您添加的案例。

(1)请适当标记您的问题。MySQL和Oracle是两种不同的数据库。(2) 使用浮点表示法时,您的问题没有正确答案。1001.00与1001.9999999999相同…假设值存储为浮点数,这个问题没有意义。我相信海报在给定的场景中寻找3个不同的值。如果这就是结果,你能澄清一下吗?是的,我的第二个查询将给出给定场景中所需的相同输出。我相信可以省略
子字符串长度
参数(
substr
的第三个参数)。如果你还添加一点解释,那就太好了。我看到您正在使用
char\u length
函数查找十进制值的字符串表示长度,然后减去下限值的字符串长度。减1用于调整字符串表示法中的小数点字符“”
SELECT char_length(field + 0) - char_length(floor(field + 0)) - 1 as digits_after_decimal;
SELECT char_length(1039.320293); #returns 11
SELECT floor(1039.320293); #returns 1039
SELECT char_length(floor(1039.320293)) #returns 4