我正在使用Camel将命名参数发送给对Postgres数据库的查询。有问题的命名参数名为members
,它是字符串化的mac地址的列表,例如['40:61:86:05:fd:69', '40:61:86:05:fd:69']
,然后我想用它来过滤我的结果集。
简体where mac_column IN list_of_varchar_mac
。
实际代码段:
SELECT
*
FROM
table
WHERE
mac IN(:#in:members::macaddr);
但是,只有在mac地址列表中只有一项时,上述方法才有效。如果有两个,则会出现以下错误:
operator does not exist: macaddr = character varying
看起来很简单,它只是一个数组,所以我尝试以下方法:
WHERE
mac IN(:#in:members::macaddr[]);
新错误,Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: macaddr = macaddr[]
。
读取Postgres documentation on the macaddr type时,似乎无法使用IN:
macaddr类型还支持字典顺序的标准关系运算符(>,<=等),以及NOT,AND和OR的按位算术运算符(〜,&和|)。
我在没有骆驼作为中介的情况下尝试了以下方法,并且有效:
mac = ANY('{40:61:86:05:fd:69, 40:61:86:05:fd:69}'::macaddr[]);
但是,这将需要我创建mac地址列表的字符串,而我不想这样做。
如何仅使用SQL解决此问题?我无法触摸数据库,而我会不会触摸代码。