2017-02-03 89 views
3

私はNpgsql 3.0.3.0とPetaPoco最新バージョンを使用しています。PostgreSQL:42883オペレータが存在しません:タイムゾーンなしのタイムスタンプ=テキスト

私は、このコマンドを実行すると:

Npgsql.NpgsqlException 42883: operator does not exist: timestamp without time zone = text

は、私は、エラーメッセージが私がタイムスタンプ(日付)を比較しようとしていると言っている理解:私は次のエラーを取得する

var dateCreated = DateTime.Now; // just an example 
var sql = new Sql("WHERE date_created = @0", dateCreated.ToString("yyyy-MM-dd HH:00:00")); 
var category = db.SingleOrDefault<Category>(sql); 

をしかし、私にとっては、私がと期待しているので、それらを比較することは完全に有効です。次のSQL文を作成します。

SELECT * FROM category WHERE date_created = '2017-02-03 15:00:00' 

パフォーマンス上の理由から、実際にデータベース列をテキストに型キャストしたくありません。

答えて

2

あなたはtimestsampに値をキャストする必要があります。

var sql = new Sql("WHERE date_created = @0::timestamp", dateCreated.ToString("yyyy-MM-dd HH:00:00")); 
0

ローマン-カチャックは答え@として、あなたはタイムスタンプにあなたの文字列をキャストするのPostgreSQLを伝えることができます。

また、タイムスタンプの文字列表現を送信してキャストするのではなく、単にPostgreSQLにタイムスタンプを直接送信することもできます。これを行うには、ToString()を使わずにdateCreatedを直接送信してください。

+1

なぜ私は 'ToString()'で日時をフォーマットしているのですか?というのは、分と秒を無視する必要があるということです。 – AndreFeijo

+0

分と秒をゼロにしてC#でDateTimeを作成するだけで、これを行うこともできます。これは効果的です。文字列を使用するだけです。間違いなくそれほど重要ではありません。 –

関連する問題