PostgreSQL: 42883 L’opérateur n’existe pas: horodatage sans fuseau horaire = texte

J’utilise Npgsql 3.0.3.0 et la dernière version de PetaPoco.

Quand j’exécute cette commande:

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

Je reçois l’erreur suivante:

Npgsql.NpgsqlException 42883: l’opérateur n’existe pas: horodatage sans fuseau horaire = texte

Je comprends que le message d’erreur indique que j’essaie de comparer un horodatage (date) avec un texte, mais pour moi, il est parfaitement valide de les comparer, car j’attends que l’instruction SQL suivante soit construite:

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

Je ne souhaite pas vraiment transtyper ma colonne de firebase database en texte pour des raisons de performances.

Vous devez atsortingbuer une valeur à timestamp:

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

Comme @ roman-tkachuk a répondu, vous pouvez dire à PostgreSQL de convertir votre chaîne en horodatage.

Ou mieux encore, vous pouvez simplement envoyer un horodatage directement à PostgreSQL, plutôt que d’envoyer une représentation sous forme de chaîne d’un horodatage et de le lancer. Pour ce faire, envoyez simplement dateCreated directement, sans ToSsortingng() .