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

就可以成功了。

相关推荐
廋到被风吹走13 小时前
【数据库】【Mysql】慢SQL深度分析:EXPLAIN 与 optimizer_trace 全解析
数据库·sql·mysql
XerCis13 小时前
PostgreSQL超全指南
数据库·postgresql
数据知道13 小时前
万字详解模式(Schema):如何利用 Schema 实现PostgreSQL中开发/测试/生产环境隔离
数据库·postgresql
WilliamHu.13 小时前
智能体项目实战
数据库·oracle
数据知道13 小时前
PostgreSQL实战:详细讲述UUID主键,以及如何生成无热点的分布式主键
数据库·分布式·postgresql
数据知道13 小时前
PostgreSQL实战:如何选择合适的数据类型?
数据库·postgresql
nvd1113 小时前
Pytest 异步数据库测试实战:基于 AsyncMock 的无副作用打桩方案
数据库·pytest
os_lee14 小时前
Milvus 实战教程(Go 版本 + Ollama bge-m3 向量模型)
数据库·golang·milvus
laplace012314 小时前
向量库 Qdrant + 图数据库Neo4j+Embedding阿里百炼text-embedding-v3
数据库·embedding·agent·neo4j
云边有个稻草人14 小时前
从痛点到落地:金仓时序数据库核心能力拆解
数据库·时序数据库·kingbasees·金仓数据库·数据库安全防护