postgresql字符串函数全集

1. trim

删除字符串头部/两端/尾部的指定字符

trim([leading | trailing | both] [characters] from string)

示例:去掉字段首尾多余空格

update dim_product_mapping set pmd_program_name = trim(leading ' ' from pmd_program_name);
update dim_product_mapping set pmd_program_name = trim(trailing ' ' from pmd_program_name);

update dim_product_mapping set pmd_project_name = trim(leading ' ' from pmd_project_name);
update dim_product_mapping set pmd_project_name = trim(trailing ' ' from pmd_project_name);

update dim_product_mapping set npi_product_name = trim(leading ' ' from npi_product_name);
update dim_product_mapping set npi_product_name = trim(trailing ' ' from npi_product_name);

2. split_part

按指定字符,截取字符串中的某部分

SELECT SPLIT_PART('123','.',1)
//
SELECT SPLIT_PART('123.234.345.456','.',2)
//
SELECT SPLIT_PART('123.234.345.456','.',3)
//
SELECT SPLIT_PART('123.234.345.456','.',4)

实操:
实现 Wn 变成 W(n-2),如图
在这里插入图片描述

update dim_pss_calendar set fiscal_week=concat('W',split_part(fiscal_week,'W',2)::int2-2)  where CHAR_LENGTH(fiscal_week)<=3
update dim_pss_calendar set fiscal_week=concat('W',split_part(split_part(fiscal_week,'W',2),'-',1)::int2-2,'-',split_part(split_part(fiscal_week,'W',2),'-',2))  where CHAR_LENGTH(fiscal_week)>3

3. substring

3.1 按下标截取字符串
select substring('FY2021' FROM 3 for 2)
3.2 截取字母部分和数字部分
with my_data(sdk) as (
values
    ('JavaScript123'),
    ('JavaScript12'),
    ('Android3'),
    ('Android32'),
    ('Swift45'),
    ('Swift100')
)
select  sdk
from my_data 
order by substring(sdk from '[^\d/]*') , substring(sdk from '\d.*')::int 
3.3 字符串正则表达式
符号含义实例实例结果
.一个点代表一个字符substring(‘Thomas’ from ‘…$’)mas
%代表一个或多个字符
_代表一个字符
^代表字符前substring(‘Thomas’ from ‘^…’)Thom
$代表字符后substring(‘Thomas’ from ‘…$’)mas
#分割字符,可以在#"前中后限定选择你最想要的字符substring(‘Thomas’ from ‘%#“o_a#”_’ for ‘#’ )oma

参考:
https://blog.csdn.net/mochou111/article/details/100892037

4 contain

postgre没有contain,但是可以采用下面两种等效方法

select * from dim_pss_calendar where week like 'W%' limit 1 ;
select  * from dim_pss_calendar where position('W' in week)>0  limit 1 ;

5 case when

now() between xx and yy

SELECT 
npi_product_name,ok2pilot,sle
,case 
when now()<ok2pilot then 'Pre-Pilot' 
when now() BETWEEN ok2pilot and sle then 'Post-Pilot' 
end status   
FROM datahub_project_schedule 
WHERE product_status='256a0b4c9ee04590ad86ff5ccda9310a'

6. replace

替换源字符串1中指定字符串2为指定字符串3;

SELECT product,max(replace(replace(replace(pss_version,'_',''),'POR',''),'CWV','')::bigint) as version FROM v_business_case_quarterly GROUP BY product 

7. coalesce

取第一个不为空的值,不一定要字符串

select COALESCE(null,null); //报错
select COALESCE(null,null,now(),''); //结果会得到当前的时间
select COALESCE(null,null,'',now()); //结果会得到''

8. length

获取字符串长度

select * from bnbv  where length(design_type)>10;

9.查询指定的字段

意思是从代码中传入查询的字段到sql中,需要去掉字符串外层的双引号。
如下:

order by 
${@org.apache.commons.lang.StringEscapeUtils@escapeSql(param.sortName)}  
${@org.apache.commons.lang.StringEscapeUtils@escapeSql(param.sortBy)}
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值