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

就可以成功了。

相关推荐
银发控、几秒前
MySQL覆盖索引与索引下推
数据库·mysql·面试
DolphinDB智臾科技14 分钟前
DolphinDB 与英方软件达成兼容互认,共筑高效数据新底座
数据库·时序数据库·dolphindb
上下求索,莫负韶华20 分钟前
java-(double,BigDecimal),sql-(decimal,nuermic)
java·开发语言·sql
ZJun_Ocean21 分钟前
add_columns
数据库·sql
ID_1800790547325 分钟前
淘宝商品详情 API 接口 item_get: 高效获取商品数据的技术方案
java·前端·数据库
坐吃山猪1 小时前
Neo4j04_数据库事务
数据库·oracle·neo4j
秋氘渔1 小时前
MySQL EXPLAIN实战:6种索引失效场景验证与优化
android·数据库·mysql·索引
l1t1 小时前
DeepSeek总结的用Parquet从 ClickHouse 迁移至 CedarDB查询
clickhouse·cedardb
2301_792185881 小时前
快速熟悉后缀为yml的文件
java·linux·数据库
..过云雨1 小时前
【MySQL】4. MySQL表的操作
数据库·mysql