Tuesday, August 25, 2020

Split a word based on case sensitive...

Received data like "AetnaMercyCareRBHA" in one of our records and showing this data in the reports is quite doesn't readable. 

So, the ask is to display the value like "Aetna Mercy Care RBHA" instead.

This is in Snowflake:

select regexp_replace(regexp_replace('AetnaMercyCareRBHA', '([A-Z])', ' \\1'), '([A-Z])( )', '\\1') ;

Note that there is space before escape character in the inner regexp like ' \\1' and space within the paranethesis in the outer regexp like ( ).

The above simple regexp_replace does the trick. 

Inner regexp_replace divides the word with space whenever there is an uppercase letter.

Outer regexp_replace removes the space between upper case letters eg., "R B H A" to "RBHA"