Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 液化酶<;sql>;命令提供与直接在SQL中运行不同的结果_Java_Sql_Postgresql_Liquibase - Fatal编程技术网

Java 液化酶<;sql>;命令提供与直接在SQL中运行不同的结果

Java 液化酶<;sql>;命令提供与直接在SQL中运行不同的结果,java,sql,postgresql,liquibase,Java,Sql,Postgresql,Liquibase,我有下表: id: BIGINT value: DOUBLE test: VARCHAR 使用以下值: id: 1 value: 0.99 test: '' 在我的postgresql shell中运行以下SQL注释得到的结果与在Liquibase标记中运行的结果不同: UPDATE myTable SET test=concat('value=', value); 如果我直接在SQL shell中运行它,我得到的测试值为value=0.99,但是如果我在Liquibase标记中运行相同的

我有下表:

id: BIGINT
value: DOUBLE
test: VARCHAR
使用以下值:

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

UPDATE myTable SET test=concat('value=', value);
如果我直接在SQL shell中运行它,我得到的测试值为
value=0.99
,但是如果我在Liquibase
标记中运行相同的SQL命令,我得到的测试值为
value=0.98999999999999999


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

如果您执行的是完全相同的SQL字符串,我希望得到相同的结果。但是,您提供的
value
是一个变量,其类型由Liquibase处理,因此可能是Liquibase编号解析与原始查询字符串(包括数据库执行的数值文本)不同


如果您要使用类似于:
值:'0.99'
以及
。。。SET test=concat('value=',CAST(值为双精度))
可能会给出相同的结果。

不幸的是,这也不起作用。看起来Liquibase中有什么东西正在解析这些值。这对我来说很奇怪,因为标签应该允许直接的sql操作而不受Liquibase的影响……但它不是直接的,因为您没有将文本
0.99
放在
字符串
中,您使用的是通过Liquibase变量间接提供的值。奇怪的是,CAST并没有使它相同。我的理解是,标记中的任何内容都与直接在数据库shell中运行它一样。它只是传递命令。不幸的是,这并没有发生,它似乎在试图做些什么。我误解了这个问题。这
更新myTable SET test=concat('value=',value)在shell中使用。如果在shell中运行与Liquibase完全相同的SQL字符串,会发生什么?也许是shell中的双重解析不同。感谢您的帮助,非常感谢。不幸的是,我也没有答案;另外,shell中运行的SQL命令是什么;您是否可以在不使用任何变量(例如
value
)的情况下执行这两项操作并进行比较?我在这两项中运行的命令完全相同:updatemytable SET test=concat('value=',value)