postgresql SQL语句变量的使用说明

一般变量使用我们都是放在函数里面,这里开发需求,要在SQL直接使用变量,方便查找一些问题,比如时间变量,要根据时间进行筛选

这里有三种方法可以实现

1.psql命令使用变量

表数据如下:

hank=> select * from tb2;
 c1 | c2  |       c3
----+-------+----------------------------
 1 | hank | 2018-02-06 10:08:00.787503
 2 | dazui | 2018-02-06 10:08:08.542481
 3 | wahah | 2018-02-06 10:08:15.468527
 4 | aaaaa | 2018-02-06 10:18:39.289523

SQL文本如下

cat hank.sql
select * from tb2 where c2=:name and c3>=:time;

通过psql查看

psql -v name="'hank'" -v time="'2018-02-06 10:08:00'" -f hank.sql
 c1 | c2 |       c3
----+------+----------------------------
 1 | hank | 2018-02-06 10:08:00.787503

或者

 psql -v name="'hank'" -v time="'2018-02-06 10:08:00'" -c '\i hank.sql'
 c1 | c2 |       c3
----+------+----------------------------
 1 | hank | 2018-02-06 10:08:00.787503

效果一样

2.\set使用变量

hank=> \set name hank
hank=> \set time '2018-02-06 10:09:00'
hank=> select * from tb2 where c2=:'name' and c3>=:'time';
 c1 | c2 |       c3
----+------+----------------------------
 1 | hank | 2018-02-06 10:08:00.787503

3.通过定义参数实现

设置一个session级别的参数,通过current_setting取值

hank=> set session "asasd.time" to "2018-02-06 10:09:00";
SET
hank=> select * from tb2 where c3 >= current_setting('asasd.time')::timestamp;
 c1 | c2  |       c3
----+-------+----------------------------
 4 | aaaaa | 2018-02-06 10:18:39.289523
(1 row)

补充:postgresql存储函数/存储过程用sql语句来给变量赋值

--定义变量
a numeric;

方式一:

select sqla into a from table1 where b = '1' ;  --这是sql语句赋值

方式二:

sql1:= 'select a from table1 where b = ' '1' ' ';
execute sql1 into a; --这是执行存储函数赋值

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • PostgreSQL 正则表达式替换-使用变量方式

    ###不定期更新 把AAAA替换为A-A-A-A- javascript alert('AAAA'.replace(/([A]{1})/g,"$1-")); ()中的内容用变量$1 $2 $n代替 PostgreSQL select regexp_replace('AAAAAAAAAAAAAAAAAAAAAA','([A-Z]{1})','\1-','g') ()中的内容用变量\1 \2 \n代替 获取大括号中的内容 select f1[1] from regexp_matches('

  • 在postgresql中结束掉正在执行的SQL语句操作

    结束进程两种方式: SELECT pg_cancel_backend(PID) 取消后台操作,回滚未提交事物 (select); SELECT pg_terminate_backend(PID) 中断session,回滚未提交事物(select.update.delete.drop); SELECT * FROM pg_stat_activity; 根据datid=10841 SELECT pg_terminate_backend (10841); 补充:PostgreSQL无法在PL / pg

  • postgresql SQL语句变量的使用说明

    一般变量使用我们都是放在函数里面,这里开发需求,要在SQL直接使用变量,方便查找一些问题,比如时间变量,要根据时间进行筛选 这里有三种方法可以实现 1.psql命令使用变量 表数据如下: hank=> select * from tb2; c1 | c2 | c3 ----+-------+---------------------------- 1 | hank | 2018-02-06 10:08:00.787503 2 | dazui | 2018-02-06 10:08:08.54248

  • ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例

    本文实例讲述了ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作.分享给大家供大家参考,具体如下: ThinkPHP中获取最后一次执行sql语句的 方法有两种: 其一是 调用模型 获取 如: $sql = $model ->getLastSql(); Thinkphp中Model类,有getLastSql这个函数,甚至还有,getLastInsID,getDbError,getError,getPk,getDbFields等函数.这些函数都是我们经常可能会用到的model层的函数.

  • python3将变量写入SQL语句的实现方式

    试了一下python操作数据库,准备将前端传回来的用户名和密码写入表中 试了半天不会把变量加在在sql语句里面 网上搜索了一下,要用元组来传递多个参数 sql = "insert into userinfo values(%s,%s)" cursor.execute(sql,(name,password)) 补充拓展:python往mysql数据库中写入数据和更新插入数据 1. 连接mysql import pymysql db = pymysql.connect(host='loca

  • Postgresql 查看SQL语句执行效率的操作

    Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看 SQL 语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句. Explain语法: explain select - from - [where ...] 例如: explain select * from dual; 这里有一个简单的例子,如下: EXPLAIN SELECT * FROM tenk1; QUERY PLAN ---------

  • postgresql 常用SQL语句小结

    目录 1.查询链接数 2.查看死锁状态 3.删除死锁进程 4.备份数据库 5.还原数据库 6.插入数据 插入单条数据 插入多条数据 从一张表查询到的数据插入到另一张表 7 .查询pg中单张表的大小(不包含索引) 8.查询数据库中所有表的大小 9.按顺序查看索引 10 .查询数据库的大小 11.查询被锁定的表 12 .查询一个Schema下面的所有表的总大小(单位MB,包括索引和数据) 14 .查询表大小按大小排序并分离data与index 1.查询链接数 SELECT sum(numbacken

  • SQL语句优化之JOIN和LEFT JOIN 和 RIGHT JOIN语句的优化

    在数据库的应用中,我们经常需要对数据库进行多表查询,然而当数据量非常大时多表查询会对执行效率产生非常大的影响,因此我们在使用JOIN和LEFT JOIN 和 RIGHT JOIN语句时要特别注意: SQL语句的join原理: 数据库中的join操作,实际上是对一个表和另一个表的关联,而很多错误理解为,先把这两个表来一个迪卡尔积,然后扔到内存,用where和having条件来慢慢筛选,其实数据库没那么笨的,那样会占用大量的内存,而且效率不高,比如,我们只需要的一个表的一些行和另一个表的一些行,如果

  • postgresql 存储函数调用变量的3种方法小结

    一.假设有表student,字段分别有id,remark,name等字段. 二.写一个存储函数,根据传过去的变量ID更新remark的内容. 调用该存储函数格式如下: select update_student(1); 三.存储函数示例如下: CREATE OR REPLACE FUNCTION public.update_student(id integer) RETURNS text AS $BODY$ declare sql_str_run text; BEGIN /* --method

  • Shell脚本中执行sql语句操作mysql的5种方法

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的结果美化,需要进一步完善和调整.以下为具体的示例及其方法. 1.将SQL语句直接嵌入到shell脚本文件中 复制代码 代码如下: --演示环境  [root@SZDB ~]# more /etc/issue  CentOS release 5.9 (Final)  Kernel \r on an \

  • 常用SQL语句优化技巧总结【经典】

    本文实例总结了常用SQL语句优化技巧.分享给大家供大家参考,具体如下: 除了建立索引之外,保持良好的SQL语句编写习惯将会降低SQL性能问题发生. ①通过变量的方式来设置参数 好: stringsql = "select * from people p where p.id = ? "; 坏: stringsql = "select * from people p where p.id = "+id; 数据库的SQL文解析和执行计划会保存在缓存中,但是SQL文只要有

  • 用非动态SQL Server SQL语句来对动态查询进行执行

    此文章主要向大家讲述的是非动态SQL ServerSQL语句执行动态查询,在实际操作中我尝试在一个存储过程中,来进行传递一系列以逗号划定界限的值,来对结果集进行限制.但是无论什么时候,我在IN子句中使用变量,都会得到错误信息. 是否存在一种不执行动态SQL语句也能完成查询的方式呢? 我尝试在一个存储过程中传递一系列以逗号划定界限的值,以限制结果集.但是无论什么时候,我在IN子句中使用变量,都会得到错误信息.是否存在一种不执行动态SQL ServerSQL语句也能完成查询的方式呢? 专家解答: 这

随机推荐