zoukankan      html  css  js  c++  java
  • PostgreSQL 中日期类型转换与变量使用及相关问题

    PostgreSQL中日期类型与字符串类型的转换方法

    示例如下:

    postgres=# select current_date;
    date 
    ------------
    2015-08-31
    (1 row)

    postgres=# select to_char(current_date,'YYYYMMDD');
    to_char 
    ----------
    20150831
    (1 row)
    字符串转换为日期
    postgres=# select to_date('20150831','YYYYMMDD');
    to_date 
    ------------
    2015-08-31
    (1 row)

    PostgreSQL命令行中使用变量的问题

    postgres=# create table test_tb(id int);
    CREATE TABLE
    postgres=# select * from test_tb ;
    id

    (0 rows)

    postgres=# set var 10
    postgres=# echo :var
    10
    postgres=# insert into test_tb values (:var);
    INSERT 0 1
    postgres=# select * from test_tb ;
    id

    10
    (1 row)

    PostgreSQL中SELECT INTO操作创建临时表的问题

    postgres=# select * from child ;
    no | student_name | age | class_no 
    ------------------+---------
    1 | zhangsan | 11 | 1
    2 | zhaosi | 11 | 1
    3 | xiaoshenyang | 12 | 21
    4 | songxiaobao | 13 | 21
    5 | zhaobenshan | 31 | 1
    6 | huoya | 41 | 2
    7 | haha | 81 | 2
    (7 rows)

    postgres=# select no,age into temporary table temp01 from child where age=11;
    SELECT 2
    postgres=# select * from temp01 ;
    no | age 
    ---+----
    1 | 11
    2 | 11
    (2 rows)

    PostgreSQL中是否有表示错误,SQL状态的全局变量

    PostgreSQL处理事务中错误的方法为抛出异常并捕获之

    示例如下:

    postgres=# create function test_sqlerrm()returns void as

    $$

    declare v_val int :=0;

    begin

    raise notice '%','1111';

    v_val :=1/0;

    exception

    when others then

    raise notice '%',sqlerrm;

    end;

    $$ language plpgsql;

    CREATE FUNCTION

    postgres=# select test_sqlerrm();                 

    NOTICE:  00000: 1111

    LOCATION:  exec_stmt_raise, pl_exec.c:3035

    NOTICE:  00000: division by zero

    LOCATION:  exec_stmt_raise, pl_exec.c:3035

     test_sqlerrm

    --------------

    (1 row)

    PostgreSQL中   CASE WHEN 语法问题

    PostgreSQL同样支持case when +表达式 then +操作的语法。

    示例如下:

    postgres=# select job,ename from emp;

     job  | ename

    ----------+-------

    CLERK | SMITH

     SALESMAN | ALLEN

     SALESMAN | WARD

     MANAGER | JONES

     SALESMAN | MARTIN

     MANAGER | BLAKE

     MANAGER | CLARK

     ANALYST | SCOTT

     PRESIDENT | KING

     SALESMAN | TURNER

     CLERK | ADAMS

     CLERK | JAMES

     ANALYST | FORD

     CLERK | MILLER

     (14 rows)

    下面的SQL,意为在job字段,从第二位开始取,取3位,为'LER'的则返回LER。

    下面还是在job字段,从第二位开始取,取3位,为'ALE'的则返回在ename字段,第二位开始取,取两位的结果。

     postgres=# select ename, job,case when substring(job,2,3)='LER' THEN substring(job,2,3)

     postgres-# when substring(job,2,3)='ALE' then substring(ename,2,2)

    postgres-# else 'other'

     postgres-# end

     postgres-# from emp;

     ename | job | case

    ----------------------

    SMITH | CLERK | LER

     ALLEN | SALESMAN | LL

     WARD | SALESMAN | AR

     JONES | MANAGER | other

     MARTIN | SALESMAN | AR

     BLAKE | MANAGER | other

     CLARK | MANAGER | other

     SCOTT | ANALYST | other

     KING | PRESIDENT | other

     TURNER | SALESMAN | UR

     ADAMS | CLERK | LER

     JAMES | CLERK | LER

     FORD | ANALYST | other

     MILLER | CLERK | LER

     (14 rows)

    PostgreSQL中所有的类型都可以使用单引号(‘ ’)来输入。

    warehouse_db=# select int '1' + int '100';
    ?column? 
    ----------
    101
    (1 row)

    PostgreSQL支持使用标准SQL的类型转换函数CAST进行类型转换。

    warehouse_db=# select CAST('5' as char),CAST('2015-10-10' as char);
    bpchar | bpchar 
    --------+--------
    5 | 2
    (1 row)

    warehouse_db=# select CAST('5' as char),CAST('2015-10-10' as varchar(10));
    bpchar | varchar 
    --------+------------
    5 | 2015-10-10
    (1 row)

    PostgreSQL中双冒号类型转换的简洁方式。

    warehouse_db=# select '5'::int ,'2015-10-10'::date;
    int4 | date 
    ------+------------
    5 | 2015-10-10
    (1 row)

    一种任意类型的一个常量可以使用下列记号中的任意一种输入:

    type ’string’

    ’string’::type

    CAST ( ’string’ AS type )

    字符串常量的文本被传递到名为type的类型的输入转换例程中。其结果是指定类型的一个常

    量。如果对该常量的类型没有歧义(例如,当它被直接指派给一个表列时),显式类型造型

    可以被忽略,在那种情况下它会被自动强制。

    字符串常量可以使用常规SQL 记号或美元引用书写。

    也可以使用一个类似函数的语法来指定一个类型强制:

    typename ( ’string’ )

    但是并非所有类型名都可以用在这种方法中,::、CAST()以及函数调用语法也可以被用来指定任意表达式的运行时类型转换。要避免语法歧义,type ’string’语法只能被用来指定简单文字常量的类型。type ’string’语法上的另一个限制是它无法对数组类型工作,指定一个数组常量的类型可使用::或CAST()。

    CAST()语法符合SQL。type ’string’语法是该标准的一般化:SQL 指定这种语法只用于一些数据类型,但是PostgreSQL允许它用于所有类型。带有::的语法是PostgreSQL的历史用法,就像函数调用语法一样。

  • 相关阅读:
    zookeeper简介(二)
    zookeeper简介(一)
    消息队列及常见消息队列介绍
    使用IntelliJ IDEA 和 Maven创建Java Web项目
    Java NIO 缓冲区Buffer(二)缓冲区的创建
    Java NIO 缓冲区Buffer(一)基础学习
    Java NIO使用及原理之--选择器Seclector
    JAVA集合类汇总
    谈谈final、finally、 finalize有什么不同?
    查看SELinux状态:
  • 原文地址:https://www.cnblogs.com/xmzzp/p/6284294.html
Copyright © 2011-2022 走看看