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")

就可以成功了。

相关推荐
倔强的石头_3 分钟前
数据库行标识符机制探究:OID、ROWID与自增主键的实现与应用
数据库·后端
SPC的存折7 分钟前
1、MySQL数据库基础
linux·运维·数据库·mysql
pixcarp12 分钟前
GORM基础入门使用教程
数据库·golang
升职佳兴14 分钟前
SQL 进阶4:查询从未下单的用户与 NOT EXISTS 完整解析
数据库·sql
光泽雨20 分钟前
数据库中的DCL
数据库
星辰_mya43 分钟前
【无标题】
数据库·后端·面试·架构师
Yvonne爱编码1 小时前
数据库---Day6 数据库约束
数据库
空太Jun1 小时前
Spring Security 自定义数据库认证(初尝试)
java·数据库·spring
sinat_255487811 小时前
泛型·学习笔记
java·jvm·数据库·windows·python