我正在使用node-pg并尝试执行以下查询:
var q = "SELECT * FROM parentorder WHERE trade_date = (now() + interval '6h 55m')::date ORDER BY create_us DESC LIMIT 50";
// Parent Orders
db.query(q, function(err, result) {
if (err) throw err;
console.log(result.rows);
});
查询抛出此错误
error: operator does not exist: character = date
有什么想法吗?
答案 0 :(得分:2)
错误消息:
错误:运算符不存在:character = date
表示没有=
运算符用于比较character
和date
,因此您的问题是trade_date
是character
列,但您正在尝试将其视为约会。
您应该将trade_date
更改为实际日期列:
alter table parentorder alter column trade_date type date using trade_date::date
如果日期格式很奇怪,你不能简单地将字符串转换为date
,那么你必须在尝试ALTER TABLE之前清理格式,或者想出一个表达式你可以用于转换而不是简单的trade_date::date
。
如果您不想让trade_date
成为明智的类型,或者您不能,那么您可以使用to_char
将now() + interval '6h 55m'
格式化为字符串:
WHERE trade_date = to_char(now() + interval '6h 55m', 'YYYY-MM-DD')
您必须调整'YYYY-MM-DD'
格式以匹配trade_date
中的所有格式。您也可以尝试投射trade_date
:
where trade_date::date = (now() + interval '6h 55m')::date
如果您尝试这样做,可能会遇到一些索引问题。无论如何,我认为你用一个真正的date
专栏会更好,一切(包括索引)都会更好地运作。