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

PostgreSQL日期格式中:Mi报错,寻求替代转义方案

Node.js调用PostgreSQL时格式字符串冒号报错的解决方法

问题根源

你遇到的":Mi" has no value in the given object错误,本质不是PostgreSQL的语法问题,而是你使用的Node.js ORM(如Sequelize)会把SQL中的:xxx识别为参数占位符,试图从传入的参数对象中匹配对应键值。但格式字符串里的:Mi、:MI是PostgreSQL日期格式的语法,并非参数,所以ORM抛出了找不到对应值的错误。

替代转义方案(除||CHR(58)||外)

1. 双冒号转义

ORM通常会将连续两个冒号::解析为单个冒号,直接修改格式字符串即可:

select to_date(a.game_date|| ' ' ||a.game_time, 'yyyy-MM-dd HH24::Mi') as "beginTime", a.game_id "gameId"
to_char(to_timestamp(t/1000), 'YYYY-MM-DD"T"HH24::MI::SS"Z"')

2. 关闭ORM的参数解析

如果是执行原生SQL查询,可以显式关闭ORM的参数替换逻辑。比如在Sequelize中调用sequelize.query()时,传入配置项禁用参数解析:

sequelize.query(
  'select to_date(a.game_date|| \' \' ||a.game_time, \'yyyy-MM-dd HH24:Mi\') as "beginTime", a.game_id "gameId"',
  { raw: true, replacements: {} }
);

关于PostgreSQL E'foo'语法的说明

PostgreSQL的E'...'语法是用于处理反斜杠转义的扩展字符串(比如E'\t'表示制表符),它不负责转义冒号。你尝试的E'yyyy-MM-dd HH24:Mi'无效,因为冒号的解析发生在ORM层面,还没到PostgreSQL执行阶段。

内容的提问来源于stack exchange,提问作者3960278

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:15:50