Clickhouse异常:Exception: No operation equals between Decimal(X, X) and Float64

在使用clickhouse中的Decimal类型存储数字时,使用Decimal类型字段作为查询条件时,比如:

SELECT COUNT(*) AS total FROM table WHERE ( my_number=10.2)

会报错如下:Exception: No operation equals between Decimal(X, X) and Float64

原因是clickhouse会将10.2认为是float64类型,不是decimal类型,无法互转。

一般方法是可以用数据自带的转换函数,如:

SELECT COUNT(*) AS total FROM table WHERE ( my_number= toDecimal(10.2, 2))

SELECT COUNT(*) AS total FROM table WHERE ( toFloat64(my_number)= 10.2)

但是如果是在我们的mybatis-plus的wrapper条件代码里就不好用了,如:

.eq(TableModel::getMyNumber, 5.2d)

不管Decimal映射的java类型是Double还是BigDecimal都会报错,说到底它还是到数据库执行时报错了。

后来我发现,clickhouse会把字符串成功转成Decimal,而不会把数字转成Decimal,如下:

SELECT COUNT(*) AS total FROM table WHERE ( my_number= '10.2')

所以修改mybatis-plus的wrapper查询条件代码如下:

.eq(TableModel::getMyNumber, "5.2")

就可以成功了。

相关推荐
小短腿的代码世界2 小时前
Qt 股票订单撮合引擎:高频交易系统的核心心脏
开发语言·数据库·qt·系统架构·交互
JosieBook2 小时前
【数据库】时序数据库选型指南:从数据模型到大模型智能分析
数据库·时序数据库
小猿姐3 小时前
Clickhouse Kubernetes Operator 实测:哪种方案更适合生产?
运维·数据库·kubernetes
2501_921939263 小时前
MHA高可用
数据库·mysql
_Evan_Yao4 小时前
MySQL 基础:SELECT、WHERE、JOIN 的第一次使用
数据库·mysql
weixin_444012935 小时前
c++如何将std--vector直接DUMP到二进制文件_指针地址直写【附代码】
jvm·数据库·python
woxihuan1234565 小时前
Go语言中--=运算符详解:位右移赋值操作的原理与应用
jvm·数据库·python
java1234_小锋5 小时前
SpringBoot为什么要禁止循环依赖?
java·数据库·spring boot
神仙别闹5 小时前
基于QT(C++)实现学生成绩管理系统
数据库·c++·qt
m0_690825826 小时前
如何备份被破坏的数据表_强制跳过错误的导出尝试
jvm·数据库·python