postgresql Dapper & npgsql的Postgres间隔不起作用

zrfyljdw  于 2023-03-17  发布在  PostgreSQL
关注(0)|答案(1)|浏览(117)

我正在使用带有Postgres npgsql的Dapper,我在使用INTERVAL执行SQL命令时遇到了问题。该命令在我的代码之外工作正常。
我得到了错误
Npgsql.PostgresException:“42601:“$1”处或其附近出现语法错误
位置:85'
位置85正是参数@ageInDays所在的位置。
我的密码是

int ageInDays = 90;
string mysql = "DELETE FROM Monitorvalues m1 WHERE lastupdate < current_date - INTERVAL @ageInDays DAY";

using (var connection = GetConnection)
{
    var dynamicParameters = new DynamicParameters();
    dynamicParameters.Add("ageInDays", ageInDays);
    return await connection.ExecuteScalarAsync<int>(mysql, dynamicParameters);
}

我做错了什么?

aurhwmvo

aurhwmvo1#

当前的Npgsql不支持参数化的INTERVAL子句。一个可能的解决方案是定义一个变量,然后直接传递给它。

var ageInDays = 90;
var interval = $"INTERVAL '{ageInDays} days'";
var query = $"DELETE FROM Monitorvalues m1 WHERE lastupdate < current_date - {interval}";
return await connection.ExecuteScalarAsync<int>(query);

这应该没有问题

相关问题