Liquibase命令所产生的结果与直接在SQL中运行它的结果不同

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

显然这是一个浮点错误,但是如果我使用<sql>,为什么Liquibase会给出不同的结果?结果不应该一样吗?

答案

如果您执行的是完全相同的SQL字符串,我期望得到相同的结果。但是,您提供value作为其类型由Liquibase处理的变量,因此与包含数据库执行的数字文字的原始查询字符串相比,可能是Liquibase数字解析有所不同。

如果您使用类似的内容:value: '0.99'... SET test=concat('value=', CAST(value AS double precision))可能会得到相同的结果。

以上是关于Liquibase命令所产生的结果与直接在SQL中运行它的结果不同的主要内容,如果未能解决你的问题,请参考以下文章

SQL中MINUS的用法与UNION的用法

minus指令最后有;吗

如何使用 Liquibase XML 文件进行编程

MS-SQL Liquibase - 无法创建连接

在 liquibase 格式的 sql 文件中注释 sql 查询

Oracle Minus关键字