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_datecharacterですが、日付として処理しようとしているということです。

trade_date実際の日付列に変更する必要があります。

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

日付形式が奇妙で、単純に文字列をキャストできない場合は、 ALTER TABLEdateを試行する前に形式をクリーンアップするか、単純な の代わりに変換に使用できる式を考え出す必要があります。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 に答える