Home » SQL & PL/SQL » SQL & PL/SQL » Please help for regexp_replace in oracle 11g (Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit)
Please help for regexp_replace in oracle 11g [message #650433] Mon, 25 April 2016 06:38 Go to next message
msol25
Messages: 396
Registered: June 2011
Senior Member
Dear Friends,


Please help for getting logic like: If we have some string in varchar2 field at that time we have 8 digit numeric value and it should get replaced with "#".If value is more than 8 digit then it should be as it is and no conversion required.In this 5 digit character should not get converted only digit should get converted.like:


CREATE TABLE test_val
(  sname varchar2(1000)
)

INSERT INTO test_val values('alksjhdlfkjh12345 secure alkjshdf 12345 lakjhdf 1234567');


INSERT INTO test_val values('jkalhsdlkjhf12345lakjhsdlfjh89076');

INSERT INTO test_val values('12345jkashdlkjhf678909876');

commit;

should be converted into:

'alksjhdlfkjh12345 secure alkjshdf 12345 lakjhdf 1234567' -> 'alksjhdlfkjh***** secure alkjshdf ***** lakjhdf 1234567'

'jkalhsdlkjhf12345lakjhsdlfjh89076' -> 'jkalhsdlkjhf*****lakjhsdlfjh*****'

'12345jkashdlkjhf678909876' -> '*****jkashdlkjhf678909876'

[Updated on: Mon, 25 April 2016 06:39]

Report message to a moderator

Re: Please help for regexp_replace in oracle 11g [message #650435 is a reply to message #650433] Mon, 25 April 2016 07:04 Go to previous messageGo to next message
msol25
Messages: 396
Registered: June 2011
Senior Member
Dear Friends,

I tried, but value is getting changed if it is more than 5 digits or less than 5 digits.


select  sname,
        regexp_replace(sname,'([[:digit:]]{5})','#####')       
from    test_val



Please help for getting logic as change should happend only if there is having exactly 5 digits.
Re: Please help for regexp_replace in oracle 11g [message #650436 is a reply to message #650435] Mon, 25 April 2016 07:26 Go to previous messageGo to next message
_jum
Messages: 577
Registered: February 2008
Senior Member
Try:
WITH test(val) AS
 (SELECT 'alksjhdlfkjh12345 secure alkjshdf 12345 lakjhdf 1234567' FROM dual UNION ALL
  SELECT 'jkalhsdlkjhf12345lakjhsdlfjh89076' FROM dual UNION ALL
  SELECT '12345jkashdlkjhf678909876' FROM dual)
SELECT regexp_replace(val,'(^|[^[:digit:]])([[:digit:]]{5})([^[:digit:]]|$)','\1*****\3') repval 
 FROM test;

repval
-------------------------------------------------------------
alksjhdlfkjh***** secure alkjshdf ***** lakjhdf 1234567
jkalhsdlkjhf*****lakjhsdlfjh*****
*****jkashdlkjhf678909876
Re: Please help for regexp_replace in oracle 11g [message #650438 is a reply to message #650436] Mon, 25 April 2016 07:37 Go to previous message
msol25
Messages: 396
Registered: June 2011
Senior Member
Thanks Jum !!!
Previous Topic: Nested cursor expressions
Next Topic: get row counts daily
Goto Forum:
  


Current Time: Fri Apr 26 07:37:11 CDT 2024