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

Mic*_*las 2 sql postgresql integer casting

我有一个奇怪的问题。某些表具有要插入数字的字符串值的整数列。它非常适用于字符串值与诸如110等,但没有用十进制点值:3.14

这样的SQL看起来像:

INSERT INTO test (intcol) VALUES ('2');
INSERT INTO test (intcol) VALUES ('1.7');
Run Code Online (Sandbox Code Playgroud)

并失败:

ERROR: invalid input syntax for integer: "1.7"
Run Code Online (Sandbox Code Playgroud)

我已经在Oracle和Informix中尝试过这样的代码。两者的工作原理不同。Oracle将其四舍五入并插入2,而Informix将其截断并插入1。

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

INSERT INTO test (intcol) VALUES (1.7);
Run Code Online (Sandbox Code Playgroud)

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


问题“为什么?” 我可以回答,这是更大的应用程序的一部分,该应用程序使用所有参数均为字符串的PreparedStatement。此应用程序不检查数据库模式是否为每一列使用特定类型的变量,它仅使用字符串,实际上,PreparedStatement类似于:

InsertSQL("INSERT INTO " + table_name + " (" + columns + ") VALUES (" + question_marks + ")", csv_data);
Run Code Online (Sandbox Code Playgroud)

Pat*_*wak 5

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

INSERT INTO test (intcol) VALUES (cast('1.7' as double precision));
Run Code Online (Sandbox Code Playgroud)