select bit'10101010'; select int4'123'; select CAST('123' as int4); select numeric'123.2352342'; select '123'::int4; select true::BOOLEAN; -- t select ('f' is true)::BOOLEAN; -- f
不一樣於mysql的自增加,Postgres和Oracle都是序列的方式建立mysql
# 使用SERIAL建立序列 testdb=# create table test2 (id SERIAL, title varchar(20)); CREATE TABLE testdb=# \d 關聯列表 架構模式 | 名稱 | 類型 | 擁有者 ----------+--------------+--------+---------- public | test1 | 數據表 | postgres public | test2 | 數據表 | postgres public | test2_id_seq | 序列數 | postgres (3 行記錄) testdb=# \d test2 數據表 "public.test2" 欄位 | 類型 | Collation | Nullable | Default -------+-----------------------+-----------+----------+----------------------------------- id | integer | | not null | nextval('test2_id_seq'::regclass) title | character varying(20) | | | # 使用CREATE SEQUENCE建立序列 testdb=# CREATE SEQUENCE test3_id_seq; CREATE SEQUENCE testdb=# CREATE TABLE test3 (id int4 NOT NULL DEFAULT nextval('test3_id_seq'), name varchar(20)); CREATE TABLE testdb=# ALTER SEQUENCE test3_id_seq OWNED BY test3.id; ALTER SEQUENCE testdb=# \d 關聯列表 架構模式 | 名稱 | 類型 | 擁有者 ----------+--------------+--------+---------- public | test1 | 數據表 | postgres public | test2 | 數據表 | postgres public | test2_id_seq | 序列數 | postgres public | test3 | 數據表 | postgres public | test3_id_seq | 序列數 | postgres (5 行記錄) testdb=# \d test3 數據表 "public.test3" 欄位 | 類型 | Collation | Nullable | Default ------+-----------------------+-----------+----------+----------------------------------- id | integer | | not null | nextval('test3_id_seq'::regclass) name | character varying(20) | | |
貨幣類型能夠存儲固定小數的貨幣數目,於浮點數不一樣,它是徹底保證精度的。其輸出格式和餘燦lc_monetary的設置有關,不一樣國家的貨幣輸出格式不同正則表達式
# 我安裝的是中文版本,默認中國 postgres=# show lc_monetary; lc_monetary ----------------------------------------------------- Chinese (Simplified)_People's Republic of China.936 (1 行記錄) postgres=# select '100.5'::money; money ---------- ¥100.50 (1 行記錄) # 設置默認美圓 postgres=# set lc_monetary='C'; SET postgres=# select '100.5'::money; money --------- $100.50 (1 行記錄)
select 4+7; --加 select 4-7; --減 select 4*7; --乘 select 7/3; --除(整數除法講截斷結果) select 6%4; --求模(求餘) select 3^3; --冪(指數運算) select |/36.0; --平方根 select ||/8.0; --立方根 select 5!; --階乘 select !!5; --階乘(前綴操做) select @-0.5; --絕對值 select 31&15; --二進制 AND select 31|15; --二進制 OR select 31#15; --二進制 XOR select ~1; --二進制 NOT select 1<<8; --二進制 左移
select 'Post' || 'greSQL'; -- 字符串鏈接 SELECT BIT_LENGTH('PostgreSQL'); -- 字符串裏的二進制位的個數,位長度 SELECT CHAR_LENGTH('PostgreSQL'); -- 字符串李的字符個數 字符個數 --SELECT CONVERT('PostgreSQL' using iso_8859_l_to_utf8); -- 使用指定的轉換名字改變編碼 SELECT LOWER('PostgreSQL'); -- 轉小寫 SELECT UPPER('PostgreSQL'); -- 轉大寫 SELECT OCTET_LENGTH('PostgreSQL'); -- 字符串中的字節數 SELECT OVERLAY('PostgreSQL' placing 'hello' from 2 for 4); -- 替換子字符串 SELECT POSITION('gre' in 'PostgreSQL'); -- 指定的子字符串的位置 SELECT SUBSTRING('PostgreSQL' from 2 for 3); -- 抽取子字符串 SELECT SUBSTRING('PostgreSQL123' from '\d{1,}$'); -- 抽取匹配POSIX正則表達式的子字符串 SELECT SUBSTRING('PostgreSQL123' from '%#"123#"%' for '#'); -- 抽取匹配SQL正則表達式的子字符串,for '#'爲設置轉移字符 SELECT TRIM(' PostgreSQL '); -- 從字符串的開頭/結尾兩邊刪除只包含characters中字符(默認是一個空白)最長的字符串 SELECT TRIM('xo' from 'oxPostgreSQLxo'); -- 從字符串的開頭/結尾兩邊刪除只包含characters中字符(默認是一個空白)最長的字符串
# a必須3位,b能夠是少於5的任意位數 create table test5(a BIT(3), b BIT VARYING(5)); INSERT INTO test(a, b) values(B'101', B'1010'); INSERT INTO test(a, b) values(B'101', B'1010'); # 操做 # 十進制轉二進制 select 66::bit(8); -- 01000010 # 十六進制轉二進制 select 'x42'::bit(8); -- 01000010 # 十六進制轉十進制 select 'x42'::bit(8)::int; -- 66 # 十進制轉十六進制 select to_hex(66); -- 42
postgres=# select date('infinity'); date ---------- infinity (1 行記錄) postgres=# select current_date; current_date -------------- 2018-11-06 (1 行記錄) postgres=# select current_time; current_time ------------------- 17:04:57.71863+08 (1 行記錄) postgres=# select current_timestamp; current_timestamp ------------------------------- 2018-11-06 17:05:01.710637+08 (1 行記錄) postgres=# select clock_timestamp(); clock_timestamp ------------------------------- 2018-11-06 17:05:05.982679+08 (1 行記錄) postgres=# select now(); now ------------------------------- 2018-11-06 17:05:11.710406+08 (1 行記錄) postgres=# select date'2018-11-06'; date ------------ 2018-11-06 (1 行記錄) postgres=# select time '16:51:08'; time ---------- 16:51:08 (1 行記錄) postgres=# select time '16:51:08 PST'; time ---------- 16:51:08 (1 行記錄) postgres=# select time with time zone'16:51:08 PST'; timetz ------------- 16:51:08-08 (1 行記錄) postgres=# select time '10:51:08 PM'; time ---------- 22:51:08 (1 行記錄) postgres=# select time '10:51:08 AM'; time ---------- 10:51:08 (1 行記錄) postgres=# select time'10:51:08+8'; time ---------- 10:51:08 (1 行記錄) postgres=# select time'10:51:08+6'; time ---------- 10:51:08 (1 行記錄) postgres=# select time'10:51:08 CCT'; time ---------- 10:51:08 (1 行記錄) ^ postgres=# select time with time zone'2018-11-06 10:51:08 Asia/Chongqing'; timetz ------------- 10:51:08+08 (1 行記錄) postgres=# select time with time zone'165408+00'; timetz ------------- 16:54:08+00 (1 行記錄) postgres=# select extract(century from timestamp'2019-11-06 170722'); date_part ----------- 21 (1 行記錄) postgres=# select extract(year from timestamp'2019-11-06 170722'); date_part ----------- 2019 (1 行記錄) postgres=# select extract(decade from timestamp'2019-11-06 170722'); date_part ----------- 201 (1 行記錄) postgres=# select extract(millennium from timestamp'2019-11-06 170722'); date_part ----------- 3 (1 行記錄) postgres=# select extract(month from timestamp'2019-11-06 170722'); date_part ----------- 11 (1 行記錄) postgres=# select extract(quarter from timestamp'2019-11-06 170722'); date_part ----------- 4 (1 行記錄) postgres=# select extract(day from timestamp'2019-11-06 170722'); date_part ----------- 6 (1 行記錄) postgres=# select extract(doy from timestamp'2019-11-06 170722'); date_part ----------- 310 (1 行記錄) postgres=# select extract(hour from timestamp'2019-11-06 170722'); date_part ----------- 17 (1 行記錄)
此處不作練習,由於比較複雜,場景也沒有很差演示,固然此類型很重要,咱們後續有場景的話會專文講
你們能夠本身參考百度下幾何類型的操做符
和幾何類型的函數
sql
testdb=# select '192.168.10.10/32'::inet; inet --------------- 192.168.10.10 (1 行記錄) testdb=# select '192.168.10.10'::inet; inet --------------- 192.168.10.10 (1 行記錄) testdb=# select 'DA01:0000:0000:0000:ABCD:0000:ACBD:0003'::inet; inet --------------------- da01::abcd:0:acbd:3 (1 行記錄) testdb=# select '192.168.1.100/32'::cidr; cidr ------------------ 192.168.1.100/32 (1 行記錄) testdb=# select '00e04c757d5a'::macaddr; macaddr ------------------- 00:e0:4c:75:7d:5a (1 行記錄)