Libre Base查询中CAST AS DECIMAL返回文本而非数值的原因咨询
Libre Base查询返回文本格式且小数位数不符的原因分析
核心原因分为以下几点:
全局显示设置覆盖字段实际类型
Libre Base默认对数值型结果应用全局小数位数显示规则(默认2位),即便你通过CAST指定了DECIMAL(10,4),查询视图仍会按默认格式显示,容易让你误以为结果是2位小数的文本,但实际存储的数值精度可能是符合要求的。同时如果显示格式和字段类型不匹配,可能触发Libre Base将数值转成文本格式展示。隐式类型转换触发文本化
你SQL中使用的.001是浮点字面量,和DECIMAL类型的计算结果混合后,Libre Base的查询引擎无法正确识别最终结果的数值类型,进而将其转为文本格式。需要将.001显式转为DECIMAL类型,避免隐式转换干扰。嵌入式HSQLDB的类型推导局限
Libre Base默认使用的嵌入式HSQLDB版本通常较旧,嵌套CAST操作时,数据库引擎无法正确推导最终字段的DECIMAL类型,导致查询结果被识别为文本而非数值型。
验证与调整建议:
- 先执行简化查询
CAST("fs_mass" AS DECIMAL(10,4)) + CAST("ms_mass" AS DECIMAL(10,4)),检查结果是否为数值型;再将乘法部分改为* CAST(0.001 AS DECIMAL(10,4)),重新执行查看类型变化。 - 打开Libre Base的「工具→选项→LibreOffice Base→数值格式」,将默认小数位数改为4位,确认查询结果的显示是否符合预期。
内容的提问来源于stack exchange,提问作者devitti
相关产品推荐
相关产品推荐

