如何将间隔参数传递给预准备语句?

我想删除 Postgres 数据库中早于 X 分钟的所有数据库条目。我在go中准备好的声明看起来像这样:


delete

from my_table

where expires < (to_timestamp($1) - '$2 minutes'::interval);

如何正确传递第二个参数?$2


PS:我知道有不同的语句可以解决这个问题,但我对如何传递引用的参数非常感兴趣。


收到一只叮咚
浏览 70回答 4
4回答

凤凰求蛊

无法将参数内插到字符串文本中。对于您的情况,一个可能的解决方案是将一个带有间隔的数字相乘:where&nbsp;expires&nbsp;<&nbsp;(to_timestamp($1)&nbsp;-&nbsp;$2&nbsp;*&nbsp;'1&nbsp;minute'::interval)

婷婷同学_

可以将参数强制转换为&nbsp;字符串 ,然后将其与字符串&nbsp;连接。text' minutes'delete from my_tablewhere expires < (to_timestamp($1) - ($2::text || ' minutes')::intervalUPDATE:实际上,由于postgres确实有一个运算符,其结果是 ,你不应该需要类型转换参数。any || texttext

慕的地8271018

您可以使用make_intervaldelete from my_tablewhere expires < (to_timestamp($1) - make_interval(mins => $2));

慕村225694

您还可以改为参数化整个间隔字符串。这消除了对中间铸造和连接的需求。textquery := `&nbsp; delete from my_table&nbsp; where expires < (to_timestamp($1) - $2::interval);`interval := fmt.Sprintf("%d minutes", mins)db.Exec(query, timestamp, interval)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go