PostgreSQL:如何将带浮点数的字符串转换为整数?

时间:2015-11-30 11:36:04

标签: sql postgresql casting integer

我有奇怪的问题。有些表有整数列,我想用数字插入字符串值。它适用于具有110等值的字符串,但对于带小数点的值失败:3.14

这样的SQL看起来像:

INSERT INTO test (intcol) VALUES ('2');
INSERT INTO test (intcol) VALUES ('1.7');

失败了:

ERROR: invalid input syntax for integer: "1.7"

我在Oracle和Informix中尝试过这样的代码。两者都有效但不同。 Oracle对其进行舍入并插入2,而Informix会截断它并插入1。

我知道在PostgreSQL中我可以使用:

INSERT INTO test (intcol) VALUES (1.7);

然后PostgreSQL对它进行舍入并插入2,但我想知道我是否可以为字符串做类似的事情。

关于问题"为什么?"我可以回答这是使用PreparedStatement的更大的apliaction的一部分,其中所有参数都是字符串。这个appliaction不会检查数据库模式是否为每列使用特定类型的变量,它只是使用字符串,实际上这个PreparedStatement看起来像:

InsertSQL("INSERT INTO " + table_name + " (" + columns + ") VALUES (" + question_marks + ")", csv_data);

2 个答案:

答案 0 :(得分:4)

使用cast('1.7' as double precision),然后尝试插入。

INSERT INTO test (intcol) VALUES (cast('1.7' as double precision));

答案 1 :(得分:2)

如果您真的无法直接插入整数,可以使用 round 功能,如下所示:

InsertSQL("INSERT INTO " + table_name + " (" + columns + ") VALUES (round(" + question_marks + "))", csv_data);