1

I have this query that have to select all books filtering by a description ignoring uppercase/lowercase.

So I make this query in adonis.js / node.js:

 const queryBook = Book
            .query()
            .with('user')
 queryBook.where('description', 'like', '%'+bookDescription[0]+'%')

I have records with this bookDescription:

"Espanhol for Students ed.1 "

But when I try to filter using only "es" in lowercase, the knex don't return any record.

When I put "Es", return the book with the description that I put, so, the like %es% is not working.

I put one debug and I catch this:

knex:query select * from "books" where "description" like ? limit ? undefined +7ms
knex:bindings [ '%es%', 10 ] undefined +6ms

Apparently I don't find any wrong, but I think the like must return the record in lowercase..

I'm forgetting something?

Steve Friedl
  • 3,692
  • 1
  • 22
  • 27
bla
  • 805
  • 8
  • 27

2 Answers2

6

You can use like this

const queryBook = Book
            .query()
            .with('user')
 queryBook.where('description', 'like', `%${bookDescription[0]}%`)

or


const queryBook = Book
            .query()
            .with('user')
 queryBook.where('description', 'ilike', `%${bookDescription[0]}%`)

More Info. view knexjs docuemnts

Amit Kadivar
  • 716
  • 4
  • 11
3

For case insensitive search you can use following like query

const queryBook = Book
        .query()
        .with('user')
queryBook.whereRaw(`LOWER(description) LIKE ?`, [`%${bookDescription[0]}%`])
Ankur Patel
  • 458
  • 3
  • 6