从mac列中的varchar的mac IN列表中选择

时间:2018-09-04 05:53:45

标签: apache-camel postgresql-9.3

我正在使用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解决此问题?我无法触摸数据库,而我会不会触摸代码。

0 个答案:

没有答案