首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事

postgresql 中某个字符出现的次数

发布网友 发布时间:2022-04-21 17:40

我来回答

3个回答

懂视网 时间:2022-04-09 20:40

今天因为要处理曾经的一个Bug产生的数据库字段内容冗余的问题,需要用到截取函数。

在网上翻阅了一下,找到了这个字符串函数POSITION。

POSITION(substr IN str)

POSITION(substr IN str) is a synonym for LOCATE(substr,str).

下面是官方文档的地址

https://www.postgresql.org/docs/9.3/static/functions-string.html

用的时候,是想去掉字段里的下划线。用过SQL的都知道,下划线是表示一个占位符的,如果想查找下划线,是需要进行转义的。

不过在POSITION的substr这个参数位时,不需要转义。让我惊奇了一下。

这个substr应该必须是明确的一个字符串,不能有任何占位符呢。学到了!

PostgreSQL字符串函数——POSITION

标签:synonym   产生   ring   substr   ons   字符串   https   static   划线   

热心网友 时间:2022-04-09 17:48

可以用函数实现, 如下:

create or replace function get_txt_count(p_source_txt character varying, p_count_txt character varying)
returns integer
as $get_txt_count$
declare
v_idx integer := 1;
v_cnt integer := 0;
v_source_txt character varying(2000) := p_source_txt;
v_len integer := length(p_count_txt);
begin
   while v_idx > 0 loop
       v_idx := position(p_count_txt in v_source_txt);
       if v_idx > 0 then
           v_cnt := v_cnt + 1;
           v_source_txt := right(v_source_txt, length(v_source_txt) - v_idx - v_len + 1);
       end if;
   end loop;
   return v_cnt;
end;
$get_txt_count$ language plpgsql;

调用:

select get_txt_count('a.b.c.d.e', '.');

热心网友 时间:2022-04-09 19:06

postgres=# select length('a.b.c.d.e') - length(replace('a.b.c.d.e','.',''));
?column?
----------
4
(1 row)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com