postgres 显示变量_sql - 如何在PostgreSQL查询中声明变量
sql - 如何在PostgreSQL查询中声明变量
如何声明变量以用于PostgreSQL 8.3查询?
在MS SQL Server中,我可以这样做:
DECLARE @myvar INT
SET @myvar = 5
SELECT *
FROM somewhere
WHERE something = @myvar
我如何在PostgreSQL中做同样的事情? 根据文档变量被简单地声明为“名称类型;”,但这给了我一个语法错误:
myvar INTEGER;
有人能给我一个正确语法的例子吗?
8个解决方案
146 votes
我通过使用WITH条款完成了相同的目标,它没有那么优雅,但可以做同样的事情。 虽然这个例子真的有点过分。 我也不特别推荐这个。
WITH myconstants (var1, var2) as (
values (5, 'foo')
)
SELECT *
FROM somewhere, myconstants
WHERE something = var1
OR something_else = var2;
fei0x answered 2019-05-09T12:34:14Z
65 votes
PostgreSQL中没有这样的功能。 您只能在pl / PgSQL(或其他pl / *)中执行此操作,但不能在纯SQL中执行此操作。
一个例外是WITH ()查询,它可以作为变量,甚至tuple的变量。 它允许您返回临时值表。
WITH master_user AS (
SELECT
login,
registration_date
FROM users
WHERE ...
)
SELECT *
FROM users
WHERE master_login = (SELECT login
FROM master_user)
AND (SELECT registration_date
FROM master_user) > ...;
J.Wincewicz answered 2019-05-09T12:33:48Z
53 votes
你也可以在PLPGSQL中试试这个:
DO $$
DECLARE myvar integer;
BEGIN
SELECT 5 INTO myvar;
DROP TABLE IF EXISTS tmp_table;
CREATE TABLE tmp_table AS
SELECT * FROM yourtable WHERE id = myvar;
END $$;
SELECT * FROM tmp_table;
以上要求Postgres 9.0或更高版本。
Dario Barrionuevo answered 2019-05-09T12:34:46Z
36 votes
这取决于您的客户。
但是,如果您使用的是psql客户端,则可以使用以下命令:
my_db=> \set myvar 5
my_db=> SELECT :myvar + 1 AS my_var_plus_1;
my_var_plus_1
---------------
6
Shahriar Aghajani answered 2019-05-09T12:35:18Z
34 votes
动态配置设置
你可以“滥用”动态配置设置:
-- choose some prefix that is unlikey to be used by postgres
set session my.vars.id = '1';
select *
from person
where id = current_setting('my.vars.id')::int;
配置设置始终是varchar值,因此在使用它们时需要将它们转换为正确的数据类型。 这适用于任何SQL客户端,而postgresql.conf仅适用于postgresql.conf
以上要求Postgres 9.2或更高版本。
对于以前的版本,变量必须在使用之前在postgresql.conf中声明,因此它在一定程度上限制了它的可用性。 实际上不是变量完全,但配置“类”本质上是前缀。 但是一旦定义了前缀,就可以使用任何变量而无需更改postgresql.conf
a_horse_with_no_name answered 2019-05-09T12:36:12Z
18 votes
使用pl / PgSQL之外的临时表
除了建议使用pl / pgsql或其他pl / *语言之外,这是我能想到的唯一其他可能性。
begin;
select 5::int as var into temp table myvar;
select *
from somewhere s, myvar v
where s.something = v.var;
commit;
Evan Carroll answered 2019-05-09T12:36:45Z
6 votes
我想提议对@ DarioBarrionuevo的答案进行改进,以便更简单地利用临时表。
DO $$
DECLARE myvar integer = 5;
BEGIN
CREATE TEMP TABLE tmp_table ON COMMIT DROP AS
-- put here your query with variables:
SELECT *
FROM yourtable
WHERE id = myvar;
END $$;
SELECT * FROM tmp_table;
bluish answered 2019-05-09T12:37:10Z
2 votes
以下是使用PREPARE语句的示例。 您仍然无法使用?,但您可以使用$n表示法:
PREPARE foo(integer) AS
SELECT *
FROM somewhere
WHERE something = $1;
EXECUTE foo(5);
DEALLOCATE foo;
Martin Zinovsky answered 2019-05-09T12:37:36Z
postgres 显示变量_sql - 如何在PostgreSQL查询中声明变量相关推荐
- c语言变量在头文件定义变量吗,在头文件C中声明变量
参见英文答案 > What should go into an .h file? 12个 我正在尝试创建一个简单的程序,使用 ...
- 如何在MySQL中声明变量?
本文翻译自:How to declare a variable in MySQL? How to declare a variable in mysql, so that my second quer ...
- PHP字符串中的变量解析(+教你如何在PHP字符串中加入变量)
定义字符串的时候,用单引号或者双引号都是可以的.我个人习惯是用双引号. 在输出字符串的时候,若字符串中含有字符串变量,使用单引号和双引号则是有区别的.如下面程序: 1 2 3 4 5 6 7 8 &l ...
- python中声明变量注意事项_我们如何在Python中声明变量?
简短的答案是,无需在Python中声明变量. 以下是更详细的描述. 静态类型语言(C,C ++,Java,C#)要求在程序中使用变量之前,必须先声明要使用的变量的名称和类型声明.相应的语言编译器确保将 ...
- 在循环之前或循环中声明变量之间的区别?
本文翻译自:Difference between declaring variables before or in loop? I have always wondered if, in genera ...
- 【C 语言】结构体 ( 结构体类型定义 | 结构体类型别名 | 声明结构体变量的三种方法 | 栈内存中声明结构体变量 | 定义隐式结构体时声明变量 | 定义普通结构体时声明变量 )
文章目录 一.结构体类型定义 二.结构体类型别名 三.结构体类型变量声明 1.使用结构体类型 ( 别名 ) 声明变量 2. 定义隐式结构体时声明变量 3.定义普通结构体时声明变量 二.完整代码示例 一 ...
- php mysql group by_php – 如何在mysql查询中解决“不在GROUP BY中”错误
我有两个模型:帖子和喜欢有一对多的关系(所以,一个帖子有很多喜欢). Likings模型还有一个isActive字段,表示喜欢是主动还是被动. 我想获得(排序)前5个帖子,这些帖子已经收到了最大的&q ...
- react前端显示图片_如何在react项目中引用图片?
如何在react项目中引用图片?本文码云笔记将为大家整理在react项目中插入图片以及背景图片的方法,希望对需要的小伙伴提供一些参考. 在react项目中插入图片以及背景图片的方法共有2种: 1.im ...
- t-sql 使用正则表达式_如何在T-SQL查询中使用可扩展表达式; 性能优势和实例
t-sql 使用正则表达式 挑战 (The challenge) One of the main tasks of a SQL Server database administrator is per ...
最新文章
- leetcode算法题--多米诺与托米诺平铺★
- nmon服务器监控工具的使用安装
- Python中if条件判断语句的用法!
- golang 防知乎 中文验证码 源码
- mysql-nt.exe w3wp.exe cpu 100%_认识w3wp.exe进程,从根本上解决占用资源较大问题
- 2017西安交大ACM小学期数论 [阅兵式]
- 理论基础 —— 排序 —— 直接选择排序
- Summed-Area Variance Soft Shadow Mapping(SAVSM):二
- a good website to test OTP
- 如何把Java的double类型变量保留两位小数
- 三星Galaxy Note 20系列将首发Exynos 992:性能超骁龙865
- C++远征离港篇-学习笔记
- SPSS操作(五):主成分分析
- QQ、微信动态图表情包怎么制作?视频如何转GIF
- 英语系大一计算机课程有哪些,英语专业大一学习计划.docx
- word单元格调整文字行间距
- 测试用例 测试的方法
- 自学MBA,我推荐你看这本《MBA必读12篇》
- windows7自带摄像头拍照摄像软件
- 爬虫-招聘系列2----boss某直聘