如何在PostgreSQL中查找字符串中特定字符的第一次和最后一次出现

MD *_*med 6 postgresql plpgsql

我想在字符串中找到特定字符的第一次和最后一次出现.例如,考虑一个名为"2010 - #### - 3434"的字符串,并假设要搜索的字符是"#".字符串内第一次出现的散列位于第6位,最后一次出现位于第9位.

rfu*_*sca 16

好...

Select position('#' in '2010-####-3434');
Run Code Online (Sandbox Code Playgroud)

会给你第一个.如果你想要最后一个,只需用你的字符串的反向再次运行它.可在此处找到pl/pgsql字符串反向.

Select length('2010-####-3434') - position('#' in reverse_string('2010-####-3434')) + 1;
Run Code Online (Sandbox Code Playgroud)

  • 作为函数`CREATE OR REPLACE FUNCTION last_position(text, char) RETURNS integer LANGUAGE SQL AS $$ Select length($1) - position($2 in reverse($1)) + 1; $$;` (2认同)
  • 这不是rev​​erse_string,而是reverse() (2认同)

小智 7

我的例子:

reverse(substr(reverse(newvalue),0,strpos(reverse(newvalue),',')))
Run Code Online (Sandbox Code Playgroud)
  1. 反转所有字符串
  2. 子串字符串
  3. 反转结果

  • 这是一个非常简洁的“一句台词”,它做了一些事情——只是不是OP所要求的!它找到字符串中逗号的最后一个位置,然后返回该点之后的原始字符串。很高兴将这些放在一起,但如果它能说出它的实际作用,那么对其他人(包括我!)会更有用。 (2认同)

小智 6

char = '.'需要逃生的情况下.所以函数可以写成:

CREATE OR REPLACE FUNCTION last_post(text,char) 
RETURNS integer LANGUAGE SQL AS $$  
select length($1)- length(regexp_replace($1, E'.*\\' || $2,''));  
$$;
Run Code Online (Sandbox Code Playgroud)


Pet*_*ans 3

我不知道该怎么做,但正则表达式函数如regexp_matchesregexp_replace、 和regexp_split_to_array可能是解决您的问题的另一种途径。