postgresql postgres NodeJs将NULL转换为INTEGER错误

isr3a4wc  于 5个月前  发布在  PostgreSQL
关注(0)|答案(2)|浏览(76)

Postgres表the_table有一个INTEGER列the_int_col
在NodeJS模块中,我有以下代码:

var values = [ '' ]; // Actual value is derived from other queries

const sql = 'INSERT INTO the_table ( the_int_col )VALUES ( $1::integer ) RETURNING id';

var res = await db.query( sql, values );

字符串
运行它,我得到这个错误:
错误:类型integer的输入语法无效:“”
我也试过:

const sql = 'INSERT INTO the_table ( the_int_col )VALUES ( NULLIF($1::integer, \'\') ) RETURNING id';

k10s72fa

k10s72fa1#

NULLIF几乎是正确的,你只需要稍后投:

const sql = "INSERT INTO the_table(the_int_col) VALUES ( CAST(NULLIF($1, '') AS integer)) RETURNING id";

字符串

mctunoxg

mctunoxg2#

你所面临的问题是由于你在SQL查询中处理空字符串(“)到整数的转换的方式。在PostgreSQL中,空字符串不能直接转换为整数,这就是为什么你遇到错误invalid input syntax for type integer:“"。
使用NULLIF($1::integer,'')的第二种方法是正确的,但它的结构不正确。NULLIF应该在尝试将类型转换为integer之前使用。PostgreSQL中的NULLIF函数在两个参数相等时返回NULL;否则,它返回第一个参数。在您的情况下,您希望在输入为空字符串时返回NULL,然后将结果转换为整数。
以下是如何修改SQL查询:

const sql = 'INSERT INTO the_table (the_int_col) VALUES (NULLIF($1, \'\')::integer) RETURNING id';

字符串
在这个修改后的查询中,如果$1是空字符串,NULLIF($1,'')将返回NULL,否则返回$1本身。然后,::integer转换将正确处理NULL值(将它们保持为NULL),并将非空字符串转换为整数。
确保Node.js代码中的values数组被适当地填充。如果你期望整数或空字符串,这种方法应该可以正常工作。如果数组可能包含其他类型的数据,你可能需要在数据库查询之前进行额外的验证或转换逻辑。

相关问题