为什么gorm postgresql将pq:syntax error抛出到或接近“0”)&引用;? SELECT_QUERY=`SELECT*来自c_id=?和开始时间>?和 结束时间0{ query=query.Where(`v_id IN(?)`,v) }//只有此块在结束时间之后(首先)引入 var c=request.GetStatus().String() 如果len(c)>0{ query=query.Where(“status=?”,c)//这将在和之后引入另一个大括号//和 }

为什么gorm postgresql将pq:syntax error抛出到或接近“0”)&引用;? SELECT_QUERY=`SELECT*来自c_id=?和开始时间>?和 结束时间0{ query=query.Where(`v_id IN(?)`,v) }//只有此块在结束时间之后(首先)引入 var c=request.GetStatus().String() 如果len(c)>0{ query=query.Where(“status=?”,c)//这将在和之后引入另一个大括号//和 },postgresql,go,go-gorm,Postgresql,Go,Go Gorm,以下是在日志中生成和找到的查询 SELECT_QUERY = `SELECT * FROM events WHERE c_id = ? AND start_time > ? and end_time < ?` query := sr.db.Raw(SELECT_QUERY, request.GetCId(), startTime, endTime) var v = request.GetVIds()

以下是在日志中生成和找到的查询

SELECT_QUERY = `SELECT * FROM events WHERE c_id = ? AND start_time > ? and
                                    end_time < ?`

query := sr.db.Raw(SELECT_QUERY, request.GetCId(), startTime, endTime)

    var v = request.GetVIds()
    if len(v) > 0 {
        query = query.Where(` v_id IN (?) `, v)
    } //Only this block introduces first ) after end_time

var c = request.GetStatus().String()
    if len(c) > 0 {
        query = query.Where( " status = ? ", c) // this introduces the other opening brace //after AND
    }
从c_id=1和开始时间的事件中选择*>“2020-04-16 18:42:00”和
结束时间<'2020-04-16 18:45:50')和(1,2中的v_id)和(状态='status_MIDDLE_CLASS'顺序,按开始时间描述限制5偏移量1
stackoverflow和internet文章中的另一个解决方案没有帮助


PS:是因为我混合了db.Raw()和query.Where()?

更改为$1并不能解决问题

基本上有几件事解决了这个问题

1) 混合
原始
查询。其中
是一个问题

sr.db.Where

(二)


解决了这个问题

您正在使用哪个版本的gorm?这是否回答了您的问题。使用$1、$2等。添加代码的顺序和限制在哪里?“是因为我混合了db.Raw()和query.Where()?”我相信是这样的。我认为Gorm不支持将原始查询与fluent查询生成器相结合。
 SELECT * FROM events WHERE c_id = 1 AND start_time > '2020-04-16 18:42:00' and
                                        end_time < '2020-04-16 18:45:50' ) AND ( v_id IN (1,2)) AND ( status = 'STATUS_MIDDLE_CLASS'  ORDER BY  start_time DESC  LIMIT 5 OFFSET 1
SELECT_QUERY = `SELECT * FROM events WHERE c_id = ? AND start_time > ? and
                                    end_time < ?`
SELECT_QUERY = `events WHERE c_id = ? AND start_time > ? and
                                    end_time < ?`