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

使用Luxon与node-pg时日期等值查询失败的问题求助

使用Luxon与node-pg时日期等值查询失败的问题求助

大家好,我最近在做前后端日期交互测试时遇到了个头疼的问题,想请各位帮忙分析下:

我写了一段模拟前后端日期处理流程的测试脚本,代码如下:

this.db
.query(
`SELECT * FROM message WHERE id='5960ac15-34d6-472a-abe4-aec164a7bc90'`,
)
.then(async ({ rows }) => {
console.log(rows);
const expected = rows[0].creation_date;
const dateTime = DateTime.fromSQL(expected);
const result = dateTime.toSQL();
console.log(expected === result);
console.log(expected, typeof expected);
console.log(result);
const { rows: test } = await this.db.query(
`SELECT * FROM message WHERE creation_date=$1`,
[result],
);
console.log(test);
});

这里的this.db对应的是node-pg的Pool对象。

脚本的逻辑很简单:

  • 先通过ID查询数据库里的一条message记录,取出它的creation_date字段
  • 用Luxon把这个日期转换成SQL格式,再用转换后的日期做等值查询,试图找回同一条记录

可不管我怎么调整转换方式(比如试过toIso()、fromISO()这些方法),第二个查询始终查不到数据。

我知道node-pg默认会把数据库的日期类型解析成JS Date对象,所以特意重写了类型解析器:

types.setTypeParser(1114, function (value) {
return value;
});

types.setTypeParser(1082, (value) => value);

现在这个配置是有效的——如果直接把第一个查询拿到的expected(原始日期字符串,格式是'2023-09-04 01:34:44.522983')传入第二个查询,能正常查到数据,但用Luxon转换后的result就不行。

补充下背景:数据库里的creation_date字段是timestamp类型,这个脚本是模拟前端把原始日期转成Luxon DateTime对象后,再传回后端查询的场景。目前我只能用大于/小于这类范围查询,但业务上需要用到等值查询,实在不知道该怎么解决了,有没有朋友遇到过类似的问题?

备注:内容来源于stack exchange,提问作者Splinteer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 13:35:29