Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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 在SQL查询结果中使用DE_DE格式和无限小数位_Mysql_Sql - Fatal编程技术网

Mysql 在SQL查询结果中使用DE_DE格式和无限小数位

Mysql 在SQL查询结果中使用DE_DE格式和无限小数位,mysql,sql,Mysql,Sql,我有一个查询物流成本的表格 sqlfiddle与您可以找到的表格: 根据小提琴,桌子的定义如下: CREATE TABLE Logistics ( country TEXT, Costs_Inbound CHAR(255), Costs_Storage CHAR(255), Costs_Outbound CHAR(255) ); 要查询出站成本,我使用以下SQL: SELECT country, FORMAT(sum(Costs_Outbound), 2 ,'D

我有一个查询物流成本的表格
sqlfiddle
与您可以找到的表格:

根据小提琴,桌子的定义如下:

CREATE TABLE Logistics (
    country TEXT,
    Costs_Inbound CHAR(255),
    Costs_Storage CHAR(255),
    Costs_Outbound CHAR(255)
);
要查询出站成本,我使用以下SQL:

SELECT country,
FORMAT(sum(Costs_Outbound), 2 ,'DE_DE') Costs_Outbound
FROM Logistics
GROUP BY country WITH ROLLUP
我使用
FORMAT
函数和
DE\u DE
将千位分隔符从
,“
更改为
,小数点从
更改为
”,“

到目前为止,所有这些都很有效


但是,现在我希望只显示两个小数位,而不是无限小数位,因此我将查询更改为:

SELECT country,
FORMAT(sum(Costs_Outbound),'DE_DE') Costs_Outbound
FROM Logistics
GROUP BY country WITH ROLLUP
但是,现在它根本不显示任何小数位,而且
DE_DE
格式也不存在了


您有什么办法解决这个问题吗?

如果您没有指定要将值四舍五入的小数位数,它将采用默认的
0
,这意味着根本没有小数位数。我不认为你需要你提到的无限数,仅仅因为你可以根据你的定义
Costs\u出站小数点(65,3)
最大小数位数3

也就是说3好像是你要找的数字

SELECT country,
FORMAT(sum(Costs_Outbound), 3 ,'DE_DE') Costs_Outbound
FROM Logistics
GROUP BY country WITH ROLLUP

如果您需要更多(例如255),则应考虑更改列数据类型,并将相同的编号放入<<代码> d>代码>参数-见下文。此外,要去除尾随零,可以使用:


tl;在计算机算术中没有无限小数位这样的实体

表中的
成本定义有三位小数。因此,如果您的算术(总和等)都是加法和减法,那么您的结果将始终有三位小数

如果执行乘法或除法,结果可能在小数点右侧有更多有效数字。( 60.000 / 3.000 = 6.66666... ). 不过,您选择的数据类型
DECIMAL(65,3)
仅限于小数点后三位。这些数字的算术结果被正确地四舍五入到三位小数。以上数据类型中的结果为6.667

您可以使用
DOUBLE
,它使用。该数据类型提供大约15个有效的十进制数字,并允许小数点出现在值中的任何位置。物理学家和工程师通常使用这些数字。但是
DOUBLE
FLOAT
数据类型是物理测量的近似值。因此,当以其所有精度显示时,有时会出现令人惊讶的结果:您可能会在您预期的
123.45000000000
位置获得
123.45000000000


您可以尝试在列定义中使用较大的小数部分。例如,
DECIMAL(63,6)
可能会有所帮助。

什么是计算机术语中的“无限小数位”,因为浮点数是由IEEE 754确定的(8字节中有15个有效数字),小数是定点?Hi Kami G.,这在我的问题中是错误的。对不起。我现在将小数点(65,3)改为字符(255),以强调小数点后3位不应有限制。您可以应用我答案的第二部分,并将255作为参数。您的意思是将D改为255?没错,因此您将“2”作为小数点的位置,输入列可以容纳的最大字符数。看起来不错。你也知道我怎样才能去掉所有的0来填充小数点吗?
TRIM(TRAILING '0' FROM FORMAT(sum(Costs_Outbound), 255 ,'DE_DE')) Costs_Outbound