我指定我不使用MariaDB的最新版本,但我无法在服务器上进行更新。
我使用的是10.0.36版。
我重新创建了一个简单的表,下面是它的结构和内容,以解释我的问题。
我的问题是呈现SQL查询。如果运行此查询:
select VIS.idVisite as 'key',if(VIS.weightVisite is not NULL,VIS.weightVisite,'') as 'weight'
from visite as VIS
inner join client as CLI on VIS.idClientVisite=CLI.idClient
where VIS.idVisite in (1,2,3,4)
order by VIS.idVisite
我得到这个:
不显示大于或等于100的小数位数。
如果我这样修改查询:
select VIS.idVisite as 'key',VIS.weightVisite as 'weight'
from visite as VIS
inner join client as CLI on VIS.idClientVisite=CLI.idClient
where VIS.idVisite in (1,2,3,4)
order by VIS.idVisite;
我得到这个:
正确显示小数
如果我这样修改查询:
select VIS.idVisite as 'key',if(VIS.weightVisite is not NULL,VIS.weightVisite,'') as 'weight'
from visite as VIS
where VIS.idVisite in (1,2,3,4)
我得到这个:
正确显示小数
所以...?
我迷路了。为什么当我把“IF”条件和“INNER JOIN”结合起来时,我没有正确的小数点...?
而“如果”本身就很好用。
而“INNER JOIN”单独使用效果很好。
如果有人有主意。
客户端表的结构如下:
指令集
1条答案
按热度按时间vxf3dgd41#
查询的问题在于,您使用以下语句让数据库执行从float到string的隐式类型转换:
这不是一个好的做法(来自MariaDB docs):
当MariaDB使用操作数或不同类型时,会发生隐式类型转换,以使操作数兼容。
最好不要依赖隐式转换;而是使用CAST显式转换类型。
由于某些未知的原因,DB有时将其转换为char(4),有时(可能)转换为char(5)。
您可以明确地转换它,例如:
或
而且它总是显示正确的结果。但是如果转换为char不是你的意图,你可以使用正确的类型来避免它: