一·COALESCE(col,value)

coalesce函数空值替换函数,当某列为空时,用value值替换返回

eg:coalesce('col',0),当col为空时返回0;

二·regexp_split_to_table(value,',')

regexp_split_to_table()函数是利用正则表达式将字符串分割为表格,对指定值进行分割

SELECT
    REGEXP_SPLIT_TO_TABLE( '1,2,3,4,5,6', ',' ) AS num,
    REGEXP_SPLIT_TO_TABLE( '1。2。3。4。5。6', '。' ) AS test

 

其中分割字符需要是正则表达式中支持的字符才能分割,当使用|时会出现分割错误的情况,需要使用转移字符来解决

SELECT
  REGEXP_SPLIT_TO_TABLE('1|2|3|4|5|6', E'\\|') AS test;

三·REGEXP_SPLIT_TO_ARRAY(value,',')

REGEXP_SPLIT_TO_ARRAY()函数是将数据按字符分割后转换为数组形式

 

四· SUBSTRING(value from n1 for n2)

SUBSTRING()有三个参数,第一个是字符串,第二个是从哪里开始,第三个是截取几位

 五·获取当前时间是星期几

SELECT extract(dow FROM cast(now() as TIMESTAMP))

六·WITH RECURSIVE递归函数 

计算1到500的累加的结果。
WITH RECURSIVE t(n) AS (
    VALUES (1)
  UNION ALL
    SELECT n+1 FROM t WHERE n < 50
)
SELECT sum(n) FROM t;

#累乘到15
with recursive d(n, fact) as (
values (1,2)
union all
select n+2, (n+1)*fact from d where n < 15)
SELECT * from d; 

七·cast()函数

转换类型:将string转换为integer

select cast('1234' as INTEGER) as num

八·序列

PostgreSQL中的序列可以当作MySQL中的auto_increment来使用,但是序列并不是仅仅用于自增列

添加自增序列
CREATE SEQUENCE 表名_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
 
 
设置表某个字段自增
alter table表名 alter column id set default nextval('表名_id_seq');
 
从当前最大id依次递增
select setval('表名_id_seq',(select max(id) from 同一个表名));
 
大写字符的表需要加双引号。例如:
select setval('"表名_id_seq"',(select max(id) from "表名"));

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐