我試圖使用COALESCE來處理Go中的sql注入。COALESCE正在返回一個文本類型而不是Postgres中的time_stamp類型
query := `SELECT mc.company_name_full, msc.company_id, msc.cdate, %s
FROM %s AS mc INNER JOIN %s AS msc
ON (mc.id = msc.company_id)
WHERE %s AND
msc.company_id = COALESCE($1, msc.company_id) AND
mc.company_name_full ~* COALESCE($2, mc.company_name_full) AND
msc.cdate >= '2017-07-01' AND
msc.cdate <= '%s'`
query = fmt.Sprintf(query, selectParam, companyTable, statsTable, whereParam, time.Now().Local().Format("2006-01-02"))
此查詢的工作,但是當我嘗試使用COALESCE與TIME_STAMP
query := `SELECT mc.company_name_full, msc.company_id, msc.cdate, %s
FROM %s AS mc INNER JOIN %s AS msc
ON (mc.id = msc.company_id)
WHERE %s AND
msc.company_id = COALESCE($1, msc.company_id) AND
mc.company_name_full ~* COALESCE($2, mc.company_name_full) AND
msc.cdate >= COALESCE($3, '2017-07-01') AND
msc.cdate <= COALESCE($4, '%s')`
,但我得到這個錯誤
pq:operator does not exist: timestamp without time zone >= text
我能做些什麼,以確保COALESCE返回時間戳類型?
我不太熟悉術語極間和綁定,你介意提供一個例子嗎? –
@richard_d_sim:添加到我的原始答案。 – khampson