我有一个奇怪的问题。有些表中有整数列,我想插入带有数字的字符串值。对于像1
、10
等值的字符串,这很有效,但对于带有小数点的值,如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,其中所有参数都是字符串。该应用程序不检查数据库模式以使用特定类型的变量用于每个列,它只是使用字符串,在现实中,此PreparedStatement看起来像:
InsertSQL("INSERT INTO " + table_name + " (" + columns + ") VALUES (" + question_marks + ")", csv_data);