Node.js中使用Prisma按日期查询PostgreSQL时间戳数据的问题
Prisma按日期筛选timestamptz字段的查询方案
针对PostgreSQL中timestamptz类型的字段,要仅按日期(如2022-09-12)筛选数据,有以下几种可行写法:
方法1:构造日期区间(兼容所有Prisma版本)
通过构造目标日期的起始和次日起始时间,利用gte和lt条件匹配当天所有时间点的数据,注意时区要和数据库存储的时区一致(示例中为+05时区):
const targetDate = "2022-09-12"; // 构造目标日期的0点时间(带时区) const startOfDay = new Date(`${targetDate}T00:00:00+05:00`); // 构造次日0点时间,作为区间结束边界 const nextDayStart = new Date(startOfDay); nextDayStart.setDate(nextDayStart.getDate() + 1); const users = await prisma.user.findMany({ where: { last_time_to_active: { gte: startOfDay, lt: nextDayStart, }, }, });
方法2:使用Prisma内置date函数(Prisma 4.16+支持)
如果你的Prisma版本在4.16及以上,可以直接用prisma.date()提取日期部分进行匹配,写法更简洁:
const targetDate = "2022-09-12"; const users = await prisma.user.findMany({ where: { last_time_to_active: { equals: prisma.date(targetDate), }, }, });
方法3:直接使用SQL函数(灵活适配复杂场景)
通过Prisma的sql方法调用PostgreSQL的DATE()函数提取日期,直接匹配目标值:
const targetDate = "2022-09-12"; const users = await prisma.user.findMany({ where: { AND: [ prisma.sql`DATE("last_time_to_active") = ${targetDate}` ] }, });
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

