Filter Operators Complete Drizzle filter operator reference.
Drizzle provides filter operators as functions imported from drizzle-orm. They're used in .where() clauses and relational query conditions.
import { eq, gt, and } from 'drizzle-orm'
const orders = await db. select ()
. from (schema.orders)
. where ( and (
eq (schema.orders.status, 'active' ),
gt (schema.orders.amount, 100 )
))
Function Description SQL Equivalent Example eq(col, val)Equal to = valueeq(schema.orders.status, 'active')ne(col, val)Not equal to != valuene(schema.orders.status, 'cancelled')gt(col, val)Greater than > valuegt(schema.orders.amount, 100)gte(col, val)Greater than or equal >= valuegte(schema.orders.amount, 100)lt(col, val)Less than < valuelt(schema.orders.amount, 1000)lte(col, val)Less than or equal <= valuelte(schema.orders.amount, 1000)between(col, a, b)Between two values BETWEEN a AND bbetween(schema.orders.amount, 100, 1000)
import { gte, lte, and, between } from 'drizzle-orm'
// Range with individual operators
db. select (). from (schema.orders). where ( and (
gte (schema.orders.amount, 10 ),
lte (schema.orders.amount, 100 )
))
// Same range with between
db. select (). from (schema.orders). where (
between (schema.orders.amount, 10 , 100 )
)
// Date comparison
db. select (). from (schema.orders). where (
gte (schema.orders.createdAt, new Date ( '2025-01-01' ))
)
Function Description SQL Equivalent Example inArray(col, vals)Value is in array IN (values)inArray(schema.orders.status, ['active', 'pending'])notInArray(col, vals)Value is not in array NOT IN (values)notInArray(schema.orders.status, ['cancelled'])
import { inArray, notInArray } from 'drizzle-orm'
db. select (). from (schema.orders). where (
inArray (schema.orders.status, [ 'active' , 'pending' , 'processing' ])
)
db. select (). from (schema.orders). where (
notInArray (schema.orders.status, [ 'cancelled' , 'archived' ])
)
Function Description SQL Equivalent Example like(col, pattern)Case-sensitive pattern LIKE patternlike(schema.customers.name, 'Acme%')ilike(col, pattern)Case-insensitive pattern ILIKE patternilike(schema.customers.email, '%@example.com')
Pattern characters: % matches any sequence, _ matches one character.
import { like, ilike } from 'drizzle-orm'
db. select (). from (schema.customers). where (
like (schema.customers.name, 'Order%' )
)
db. select (). from (schema.customers). where (
ilike (schema.customers.email, '%@example.com' )
)
Function Description SQL Equivalent isNull(col)Column is null IS NULLisNotNull(col)Column is not null IS NOT NULL
import { isNull, isNotNull } from 'drizzle-orm'
// Active records (not soft-deleted)
db. select (). from (schema.orders). where ( isNull (schema.orders.deletedAt))
// Assigned records
db. select (). from (schema.orders). where ( isNotNull (schema.orders.assignedTo))
Function Description SQL Equivalent and(...conds)All conditions must match cond1 AND cond2or(...conds)At least one must match cond1 OR cond2not(cond)Negate a condition NOT (condition)
import { and, eq, gte } from 'drizzle-orm'
db. select (). from (schema.orders). where ( and (
eq (schema.orders.status, 'active' ),
gte (schema.orders.amount, 100 )
))
import { or, eq } from 'drizzle-orm'
db. select (). from (schema.orders). where ( or (
eq (schema.orders.status, 'active' ),
eq (schema.orders.status, 'pending' )
))
import { not, inArray } from 'drizzle-orm'
db. select (). from (schema.orders). where (
not ( inArray (schema.orders.status, [ 'cancelled' , 'archived' ]))
)
import { and, or, eq, gte, isNull } from 'drizzle-orm'
// Active or shipped, high value, not deleted
db. select (). from (schema.orders). where ( and (
or (
eq (schema.orders.status, 'active' ),
eq (schema.orders.status, 'shipped' )
),
gte (schema.orders.amount, 1000 ),
isNull (schema.orders.deletedAt)
))
The backend permission system uses a separate MongoDB-style operator syntax (not Drizzle functions). See Permission Operators for the server-side reference.
Function Import Usage eqdrizzle-ormeq(col, value)nedrizzle-ormne(col, value)gtdrizzle-ormgt(col, value)gtedrizzle-ormgte(col, value)ltdrizzle-ormlt(col, value)ltedrizzle-ormlte(col, value)betweendrizzle-ormbetween(col, min, max)inArraydrizzle-orminArray(col, [values])notInArraydrizzle-ormnotInArray(col, [values])likedrizzle-ormlike(col, pattern)ilikedrizzle-ormilike(col, pattern)isNulldrizzle-ormisNull(col)isNotNulldrizzle-ormisNotNull(col)anddrizzle-ormand(...conditions)ordrizzle-ormor(...conditions)notdrizzle-ormnot(condition)