java - Liquibase命令给出的结果与直接在 SQL 中运行不同
问题描述
我有下表:
id: BIGINT
value: DOUBLE
test: VARCHAR
具有以下值:
id: 1
value: 0.99
test: ''
在我的 postgresql shell 中运行以下 SQL 注释,我得到的结果与在 Liquibase<sql>
标记中运行它不同:
UPDATE myTable SET test=concat('value=', value);
如果我直接在我的 SQL shell 中运行它,我会得到我的测试值,value=0.99
但是如果我在 Liquibase<sql>
标记中运行相同的 SQL 命令,我会得到value=0.98999999999999999
显然这是一个浮点错误,但如果我使用 Liquibase,为什么会给出不同的结果<sql>
?结果不应该相同吗?
解决方案
如果您正在执行完全相同的 SQL 字符串,我会期望得到相同的结果。但是,您value
作为变量提供,其类型由 Liquibase 处理,因此与包含数据库执行的数字文字的原始查询字符串相比,可能是 Liquibase 数字解析不同。
如果您要使用类似的东西:value: '0.99'
with... SET test=concat('value=', CAST(value AS double precision))
可能会给出相同的结果。
推荐阅读
- jquery - 将嵌套的 Json 字符串转换为对象并在 Jquery 数据表单元格中呈现
- python - 从已在 pandas 中重新索引的数据透视表中选择一列
- c - scandir 的相对路径处理
- c++ - Visual Studio - C++ 新文件默认代码
- javascript - 在多个地方更新多个值的 React Context Provider
- javascript - 在while循环中检查数字的因子时获得无限循环
- gradle - 收集 Gradle 项目的依赖约束
- python - 在 Raspberry Pi 4 上使用 PyAudio 的 ALSA 错误
- excel - 如何在不使用 ColdFusion 下载的情况下生成 excel 文件 (xls) 并将其保存到服务器位置
- ruby - 卡在旧的 Ruby 版本(macOS)上