Please help for regexp_replace in oracle 11g [message #650433] |
Mon, 25 April 2016 06:38 |
|
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 #650436 is a reply to message #650435] |
Mon, 25 April 2016 07:26 |
_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
|
|
|
|