簡體   English   中英

PostgreSQL:42883 運算符不存在:沒有時區的時間戳 = 文本

[英]PostgreSQL: 42883 Operator does not exist: timestamp without time zone = text

我正在使用 Npgsql 3.0.3.0 和 PetaPoco 最新版本。

當我運行此命令時:

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:運算符不存在:沒有時區的時間戳 = 文本

我知道錯誤消息是說我正在嘗試將時間戳(日期)與文本進行比較,但是對我來說,比較它們是完全有效的,因為我期望構建以下 SQL 語句:

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

出於性能原因,我真的不想將我的數據庫列類型轉換為文本。

您需要將值轉換為timestsamp:

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

您需要將文本顯式轉換為時間戳。

嘗試使用:

TO_TIMESTAMP(date_string,'YYYY-MM-DD')

正如@roman-tkachuk 回答的那樣,您可以告訴 PostgreSQL 將您的字符串轉換為時間戳。

或者更好的是,您可以直接向 PostgreSQL 發送時間戳,而不是發送時間戳的字符串表示並對其進行轉換。 要做到這一點,只需直接發送dateCreated ,無需ToString()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM