PostgreSQL如何在WHERE语句中指定参数,实现T-SQL示例的等效查询?
PostgreSQL等效写法说明
PostgreSQL中根据使用场景不同,有两种常见的等效实现方式:
场景1:psql命令行交互环境
直接使用客户端会话变量即可,写法如下:
-- 声明并赋值日期变量 \set start '2021-10-10'::date \set end '2021-10-10'::date -- 执行查询,引用变量时前面加冒号 SELECT * FROM dbo."table" WHERE date BETWEEN :start AND :end;
场景2:匿名代码块/函数/存储过程场景
如果是在PL/pgSQL逻辑中使用,需要用DECLARE块声明变量:
DO $$ DECLARE v_start DATE := '2021-10-10'; v_end DATE := '2021-10-10'; BEGIN -- 可将查询结果存入临时表供后续调用 CREATE TEMP TABLE IF NOT EXISTS query_result AS SELECT * FROM dbo."table" WHERE date BETWEEN v_start AND v_end; END $$; -- 查看查询结果 SELECT * FROM query_result;
注意事项
- 原T-SQL示例存在笔误:连续两次声明了
@start变量,第二次实际应该声明@end,上述PostgreSQL示例已经修正了该问题 - PostgreSQL中
table属于系统关键字,作为表名使用时需要用双引号包裹,作用等同于T-SQL中的方括号 - 如果是在应用程序中调用该查询,直接使用预编译语句的参数占位符传参即可,不需要在SQL侧单独声明变量,逻辑和T-SQL用法一致。
内容的提问来源于stack exchange,提问作者white fang
相关产品推荐
相关产品推荐

