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

就可以成功了。

相关推荐
SPC的存折8 小时前
1、Redis数据库基础
linux·运维·服务器·数据库·redis·缓存
MatrixOrigin12 小时前
数据库没有死,只是范式变了
数据库·oracle
羊小蜜.13 小时前
Mysql 13: 触发器全解——创建、查看、使用与注意事项
数据库·mysql·触发器
阿里加多14 小时前
第 1 章:Go 并发编程概述
java·开发语言·数据库·spring·golang
ShiJiuD66688899914 小时前
Mysql 进阶
数据库·mysql
一 乐14 小时前
物流信息管理|基于springboot + vue物流信息管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·物流信息管理系统
Rick199314 小时前
Redis 分布式锁:核心使用场景
数据库·redis·分布式
身如柳絮随风扬15 小时前
Redis如何实现高效插入大量数据
数据库·redis·缓存