PostgreSQL:42883运算符不存在:没有时区的时间戳=文本

时间:2017-02-03 22:16:53

标签: c# postgresql npgsql petapoco

我正在使用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:运算符不存在:timestamp   没有时区=文字

我理解错误消息是说我正在尝试将时间戳(日期)与文本进行比较,但对我来说,比较它们是完全有效的,因为我期待以下SQL语句建成:

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

出于性能原因,我真的不想将我的数据库列强制转换为文本。

3 个答案:

答案 0 :(得分:3)

您需要将值转换为timestsamp:

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

答案 1 :(得分:1)

您需要将类型转换文本显式添加到时间戳。

尝试使用:

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

答案 2 :(得分:0)

正如@ roman-tkachuk回答的那样,你可以告诉PostgreSQL将你的字符串转换为时间戳。

或者更好的是,您可以直接向PostgreSQL发送时间戳,而不是发送时间戳的字符串表示并进行转换。为此,只需直接发送dateCreated,而无需ToString()