使用sqlc生成DB方法时,如何正确传递INTERVAL参数?
解决sqlc中动态传入时间间隔参数的问题
正确的SQL写法
直接将数字参数与单位为秒的interval进行乘法运算,避免引号和语法错误:
DELETE FROM demotable WHERE last_updated < NOW() - INTERVAL '1 second' * $1;
为什么这个写法可行
- 数据库层面:
INTERVAL '1 second'是固定的时间间隔常量,乘以参数$1(数字类型)后,会得到对应秒数的时间间隔,语法完全合法,不需要给参数加引号。 - sqlc层面:会自动将
$1识别为数值类型(比如Go中的int),生成的代码可以直接传入数字参数,不会被解析为字符串。
验证示例
当你传入参数30时,语句等价于NOW() - INTERVAL '30 second',和你最初的需求完全匹配。
内容的提问来源于stack exchange,提问作者PSKP
相关产品推荐
相关产品推荐

