数据库高级操作(一)

1.COALESCE()函数

主流数据库系统都支持COALESCE()函数,这个函数主要用来进行空值处理,其参数格式如下:
COALESCE ( expression,value1,value2……,valuen)
COALESCE()函数的第一个参数expression为待检测的表达式,而其后的参数个数不定。
COALESCE()函数将会返回包括expression在内的所有参数中的第一个非空表达式。
如果expression不为空值则返回expression;否则判断value1是否是空值,
如果value1不为空值则返回value1;否则判断value2是否是空值,
如果value2不为空值则返回value2;……以此类推,
如果所有的表达式都为空值,则返回NULL。

2.NULLIF函数来处理空值

这个NULLIF函数是PostgreSQL提供的最常见的条件表达式之一。

用法:NULLIF(argument_1,argument_2);

这个NULLIF如果函数返回空值参数_1等于参数_2,否则返回参数_1。

3.lpad || rpad 函数来处理空值

select lpad(‘538’, 6, ‘0’) //解释:538不满6位数时,左变补0,让其达到6位长度
select rpad(‘538’, 6, ‘0’)//解释:538不满6位数时,右边补0,让其达到6位长度

4.substring

substring函数用于从字符串中提取子字符串。

用法: SUBSTRING ( string, start_position, length )

5.case when

(
case
when substr(starttime::varchar,0,5)=‘2020’ then ‘2020年’
when substr(starttime::varchar,0,5)=‘2019’ then ‘2019年’
when substr(starttime::varchar,0,5)=‘2018’ then ‘2018年’
when substr(starttime::varchar,0,5)=‘2017’ then ‘2017年’
when substr(starttime::varchar,0,5)=‘2016’ then ‘2016年’
when substr(starttime::varchar,0,5)=‘2015’ then ‘2015年’
when substr(starttime::varchar,0,5)=‘2014’ then ‘2014年’
when substr(starttime::varchar,0,5)=‘2013’ then ‘2013年’
when substr(starttime::varchar,0,5)=‘2012’ then ‘2012年’
when substr(starttime::varchar,0,5)=‘2011’ then ‘2011年’
when substr(starttime::varchar,0,5)=‘2010’ then ‘2010年’
when starttime is null then ‘其他年份’ end
) AS year

6.行转列

SELECT unnest(string_to_array(‘4513,4564,555’,‘,’)) as a1 ;
6.1 STRING_TO_ARRAY 该函数用于分割字符串至数组元素,请看语法
string_to_array(string, delimiter [, null string])

		SELECT string_to_array('xx~^~yy~^~zz', '~^~');       -- {xx,yy,zz}
		SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'yy'); -- {xx,,zz}	

6.2 unnest函数返回表

SELECT t as name
FROM unnest(string_to_array('john,smith,jones', ',')) AS t;      
name
john
smith
jones

6.3 LIMIT
LIMIT 1 取第一个

LIMIT 1 OFFSET 0 从第零个取1个
7.split_part 切割函数

text=“name.cn” split_part(text,’.’,1) 结果: name
text=“name.cn” split_part(text,’.’,2) 结果: cn
text=“name.cn.com” split_part(text,’.’,3) 结果: com

8.strpos()
strpos() 函数返回字符串在另一个字符串中第一次出现的位置。
如果没有找到该字符串,则返回 false。

9 row_number() 序号函数
SELECT row_number() over(order by regexp_split_to_table(‘1420,168,173,174,177,181,182’, ‘,’ )) as row_number,
1.order by :会将数据排序标号
2.不需要排序 row_number() over() 即可
※SELECT row_number() over(order by regexp_split_to_table(‘1420,168,173,174,177,181,182’, ‘,’ )) as row_number,
这样得方法不可以写成
SELECT row_number() over(regexp_split_to_table(‘1420,168,173,174,177,181,182’, ‘,’ )) as row_number 会报 ERROR: syntax error at or near “(” 语法错误。
改写成
SELECT ROW_NUMBER
( ) OVER ( ) AS ROW_NUMBER,*
FROM
( SELECT regexp_split_to_table( ‘1420,168,173,174,177,181,182’, ‘,’ ) )AS t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值