node-pg返回错误(now()+ interval'6h 55m'):: date

时间:2013-09-17 16:31:18

标签: sql node.js postgresql

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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

错误消息:

  

错误:运算符不存在:character = date

表示没有=运算符用于比较characterdate,因此您的问题是trade_datecharacter列,但您正在尝试将其视为约会。

您应该将trade_date更改为实际日期列:

alter table parentorder alter column trade_date type date using trade_date::date

如果日期格式很奇怪,你不能简单地将字符串转换为date,那么你必须在尝试ALTER TABLE之前清理格式,或者想出一个表达式你可以用于转换而不是简单的trade_date::date

如果您不想让trade_date成为明智的类型,或者您不能,那么您可以使用to_charnow() + 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专栏会更好,一切(包括索引)都会更好地运作。