0

我正在使用 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

有什么想法吗?

4

1 回答 1

2

错误信息:

错误:运算符不存在:字符 = 日期

表示没有=用于比较的运算符characterdate因此您的问题是这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列,这样一切(包括索引)都会更好地工作。

于 2013-09-17T19:31:27.897 回答