Liquibase <sql>命令产生的结果与直接在SQL中运行不同

时间:2019-12-30 04:00:07

标签: java sql postgresql liquibase

我有下表:

<conio.h>

具有以下值:

id: BIGINT
value: DOUBLE
test: VARCHAR

在我的postgresql shell中运行以下SQL注释,得到的结果与在Liquibase id: 1 value: 0.99 test: '' 标记中运行它的结果不同:

<sql>

如果直接在SQL Shell中运行它,我得到的测试值就是UPDATE myTable SET test=concat('value=', value); ,但是如果我在Liquibase value=0.99标记中运行相同的SQL命令,则会得到<sql>

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

1 个答案:

答案 0 :(得分:0)

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

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