2017-01-09 14 views
0

JOOQで 'like'関数を使用して、大文字と小文字の区別や部分一致ではなく文字列データの配列を含むデータを選択します。'LIKE'関数を使用してJOOQで文字列の配列を選択する方法

表のスキーマです:

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); 

私の目標は、ケースによってデータを選択することですたとえば、likeIgnoreCase( "OraNge")など( "%ang%")を使用していますか?

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

どのように私は、関数のように使用することができます:LIKE機能付きのコードの下に開発するには

ありがとうございました。

答えて

0

PostgreSQL value = ANY (array)オペレータは、LIKE述語のような値を照合することはできません。代わりに実際のLIKE述部に頼る必要があります。 SQLでは、あなたが書いたと思います:

SELECT id, items 
FROM favorites 
WHERE EXISTS (SELECT * FROM unnest(items) AS t(item) WHERE item ILIKE '%OraNge%') 

あるいは、jOOQと:また

import static org.jooq.impl.DSL.*; 
0

context.select(FAVORITES.ID, FAVORITES.ITEMS) 
     .from(FAVORITES) 
     .whereExists(
      selectFrom(unnest(FAVORITES.ITEMS).as("t", "item") 
      .where(field(name("item", String.class)).likeIgnoreCase("%OraNge")) 
     ) 
     .fetch(); 

jOOQバージョン、いつものように、あなたは、この静的インポートを持っていると仮定しLIKEを使用するにはいくつかの方法があります。あなたはいつでもjOOQ LIKE述語を使うことができます。私の2番目の例では、SQL文を文字列で使用しています。文字列の場合と同様に、contains/startsWith/endsWithを使用することもできます。

jooq.dsl() 
    .select() 
    .from(MY_TABLE) 
    .where(Employee.EMPLOYEES.LAST_NAME.like("ER"))); 

jooq.dsl() 
    .select() 
    .from(EMPLOYEES) 
    .where(Employee.EMPLOYEES.LAST_NAME.like("ER")) 
    .and("first_name like ?", "ST")); 
関連する問題