我有一个专栏" pnum"在"测试"表。 我想取代领先的" 9"在pnum中用" *"对于每一条记录。
testdb=# select * from test limit 5;
id name pnum
===========================================
1 jk 912312345
2 tt 9912333333
我希望pnums看起来像这样:
id name pnum
===========================================
1 jk *12312345
2 tt *912333333
我如何在postgres中做这样的事情?
编辑1:
到目前为止,我尝试过这样的事情:
select id, name, '*' && substring(pnum FROM 2 FOR CHAR_LENGTH(pnum)-1 ) from test limit 3;
还试过这个:
select id, name, '*' || substring(pnum FROM 2 FOR CHAR_LENGTH(pnum)-1 ) from test limit 3;
两个人都没有工作......
编辑2:
我明白了:
select id, name, '*'::text || substring(pnum FROM 2 FOR CHAR_LENGTH(pnum)-1 ) from test limit 3;
答案 0 :(得分:1)
参见函数regexp_replace(字符串文本,模式文本,替换文本[,标记文本])String Functions and Operators
SELECT regexp_replace('9912333333', '^[9]', '*');
regexp_replace
----------------
*912333333
答案 1 :(得分:0)
您可以使用Postgres' string manipulation功能。在您的情况下"子串"和#34; Char_Length"
'*' || Substring(<yourfield> FROM 2 FOR CHAR_LENGTH(<yourfield>)-1) as outputfield