2017-01-09 71 views
1

我目前使用JOOQ从postgresql DB获取数据。然后,我遇到了一个问题,以获得哪些数据类型是数组类型的数据。如何使用JOOQ的'ANY'功能

目前的情况是象下面这样:

表模式是:

CREATE TABLE favorites (
    id int, 
    items varchar(100)[] 
); 

的样本数据是:

INSERT INTO favorites (id, items) 
    VALUES (1, '{orange, lemon, banana}'); 
INSERT INTO favorites (id, items) 
    VALUES (2, '{apple, grape}'); 

为了得到第一个数据,SQL是这样的:

SELECT id, items FROM favorites WHERE 'orange' = ANY (items); 

但是,我cann使用JOOQ创建像上面的SQL。

Connection connection = ...; 
DSLContext context = DSL.using(connection, ...); 
List<Table> table = context.select().from(TABLE).fetchInto(class.TABLE); 

我可以在JOOQ中使用任何函数吗? 如果可能,我怎样才能用JOOQ创建它。 如果不是,还有其他方法可以与JOOQ获得相同的结果吗?

预先感谢您。

回答

1

做这样的:

List<TableRecord> table = context 
    .selectFrom(TABLE) 
    .where(val("orange").eq(any(TABLE.ITEMS))) 
    .fetch(); 

上面的查询使用DSL.any(Field<T[]>)

+0

太谢谢你了。这是区分大小写的,不是吗? – tsuxkky

+0

是否有可能不区分大小写和部分匹配:例如,使用'likeIgnoreCase(“OraNge”)''或'like(“%ang%”)''? – tsuxkky

+0

给@LukasEder。 – tsuxkky