2017-02-03 162 views
3

我正在使用Npgsql 3.0.3.0和PetaPoco最新版本。PostgreSQL:42883運算符不存在: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); 

我得到以下錯誤:

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

我理解的錯誤消息是說我想一個時間戳(日期)與比較文本,但對我來說,它是完全有效的比較他們,因爲我期待以下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

正如@羅馬人Tkachuk回答,你可以告訴PostgreSQL的到你的字符串鑄造成一個時間戳。或者更好的是,您可以直接發送時間戳到PostgreSQL,而不是發送時間戳的字符串表示並將其轉換。要做到這一點,只需直接發送dateCreated,不需要ToString()

+1

我用'ToString()'格式化日期時間的原因是我需要忽略分鐘和秒鐘。 – AndreFeijo

+0

您也可以通過在C#中創建DateTime並將分鐘和秒清零來做到這一點。這就是你正在做的,只是通過一個不太「緊」的字符串。絕對不是很重要 - 只是提到它。 –

相關問題