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

就可以成功了。

相关推荐
清水白石0084 分钟前
《Python 架构师的自动化哲学:从基础语法到企业级作业调度系统与 Airflow 止损实战》
数据库·python·自动化
阿华田5128 分钟前
MySQL性能优化大全
数据库·mysql·性能优化
kaico201815 分钟前
python操作数据库
开发语言·数据库·python
被摘下的星星16 分钟前
MySQL 别名使用规则详解
数据库·mysql
墨着染霜华22 分钟前
MySQL 重复数据删除语句
数据库·mysql
ego.iblacat24 分钟前
PostgreSQL 数据库
数据库·postgresql
wgzrmlrm741 小时前
如何解决ORA-28040没有匹配的验证协议_sqlnet.ora版本兼容设置
jvm·数据库·python
一江寒逸1 小时前
零基础从入门到精通MySQL(附加篇):面试八股文全集
数据库·mysql·面试
数厘1 小时前
2.6MySQL库表操作指南(电商数据分析专用)
数据库·mysql·数据分析
需要点灵感1 小时前
SQL Server 存储过程语法整理
数据库·sql