Mic*_*las 2 sql postgresql integer casting
我有一个奇怪的问题。某些表具有要插入数字的字符串值的整数列。它非常适用于字符串值与诸如1,10等,但没有用十进制点值: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)
使用cast('1.7' as double precision),然后尝试将其插入。
INSERT INTO test (intcol) VALUES (cast('1.7' as double precision));
Run Code Online (Sandbox Code Playgroud)