开发者社区> 问答> 正文

请问, PostgreSQL脚本有宏替换, 计算字符串公式的能力吗?

类似 a=2 ; evaluate('5-a') ; 如果将这个值赋值给这个变量呢? result = evaluate('5-a') ;

展开
收起
德哥 2015-12-30 14:05:09 3966 0
1 条回答
写回答
取消 提交回答
  • 公益是一辈子的事, I am digoal, just do it. 阿里云数据库团队, 擅长PolarDB, PostgreSQL, DuckDB, ADB等, 长期致力于推动开源数据库技术、生态在中国的发展与开源产业人才培养. 曾荣获阿里巴巴麒麟布道师称号、2018届OSCAR开源尖峰人物.
    PostgreSQL支持DO来执行匿名块, 实现类似上述的功能如下 : 
    postgres=# do 
    $$
    
    postgres$# declare
    postgres$# a int;
    postgres$# result int;
    postgres$# begin
    postgres$# a := 2;
    postgres$# result := 5-a;
    postgres$# raise notice '%', result;
    postgres$# end
    postgres$# 
    $$
    
    postgres-# ;
    NOTICE:  3
    DO
    另外, 通过PostgreSQL的客户端psql定义的变量也可以实现 : 
    设置变量和它的值
    postgres=# \set a 2
    postgres=# \set result 5-:a
    输出变量的值
    postgres=# select :result;
     ?column? 
    ----------
            3
    (1 row)
    输出变量的值
    postgres=# \echo :a
    2
    postgres=# \echo :result
    5-:a
    输出当前psql下的所有变量
    postgres=# \set
    AUTOCOMMIT = 'on'
    PROMPT1 = '%/%R%# '
    PROMPT2 = '%/%R%# '
    PROMPT3 = '>> '
    VERBOSITY = 'default'
    VERSION = 'PostgreSQL 9.1.2 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-51), 64-bit'
    DBNAME = 'postgres'
    USER = 'postgres'
    HOST = '127.0.0.1'
    PORT = '1931'
    ENCODING = 'UTF8'
    LASTOID = '0'
    a = '2'
    result = '5-:a'
    删除变量
    \unset a
    \unset result
    可以参考man psql
    2019-07-17 18:23:23
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像