Have you ever wanted to replace a character in a string just by position? I needed this the other day and IMHO there is no way in Oracle PL/SQL to do this, so I decided to write this my self.
It is really simple code and it probably needs improvement but it works for now and I think it is rather simple. Any improvement suggestions are of course very welcome in the comments.
CREATE OR REPLACE FUNCTION replacepos
( source_in IN VARCHAR2
, replacechar_in IN VARCHAR2
, position_in IN NUMBER) RETURN VARCHAR2 IS
l_returnvalue VARCHAR2(32767);
BEGIN
— copy from the source string up to, but not including,
— the character position
— to be replaced
l_returnvalue := substr( str1 => source_in
, pos => 1
, len => position_in – 1);
— add the replacement character
— just a single character, but more can be sent in,
— so substring the parameter
l_returnvalue := l_returnvalue ||
substr( str1 => replacechar_in
, pos => 1
, len => 1);
— copy the rest of the source string
l_returnvalue := l_returnvalue ||
substr( str1 => source_in
, pos => position_in + 1);
RETURN l_returnvalue;
END replacepos;
Like I already replied to on Laurent Schneiders comment on the crossposting on http://blog.bar-solutions.com:
Which is ofcourse a valid way to do it. I definitely need to learn more about these regular expressions.
select regexp_replace( ‘abab’, ‘.’, ‘x’, 1, 3 )
from dual replaces the character on position 3