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的歷史用法,就像函數調用語法一樣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM