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

就可以成功了。

相关推荐
hanbr16 分钟前
Qt:事件处理与绘图详解
开发语言·数据库·qt
weixin_4440129317 分钟前
Go语言怎么防SQL注入_Go语言SQL注入防护教程【深入】
jvm·数据库·python
爱编程的小新☆19 分钟前
Langchain4j对话记忆
数据库·缓存·持久化存储·langchain4j
m0_4708576420 分钟前
C#怎么实现蓝牙设备搜索_C#如何开发Bluetooth应用【指南】
jvm·数据库·python
曦夜日长22 分钟前
Linux系统篇,开发工具(三):文件翻译的思路重构、库的深入理解、文件链接时区别与细节
linux·数据库·重构
2303_8212873827 分钟前
在 Go 中声明包级全局 Map 的正确方法
jvm·数据库·python
老纪33 分钟前
CSS移动端如何实现平滑滚动效果_设置scroll-behavior smooth属性.txt
jvm·数据库·python
johnny23334 分钟前
数据库客户端:PRQL、rainfrog、WhoDB、GoNavi、Dory、FXDB
数据库
anew___37 分钟前
SQL实战复盘:如何优雅地抛弃 JOIN 关键字?
数据库
2303_8212873837 分钟前
mysql数据量过亿时索引如何优化_mysql分库分表索引设计
jvm·数据库·python