You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:46:32