निम्नलिखित रेगेक्स प्रत्येक अपरकेस अक्षर के सामने एक अंडरस्कोर जोड़ता है:
regexp_replace(name, '([A-Z])','_\1', 'g'))
चूंकि इसका परिणाम शुरुआत में अंडरस्कोर पर होता है, इसलिए इसे trim()
. का उपयोग करके हटाया जाना चाहिए
trim(both '_' from lower(regexp_replace(name, '([A-Z])','_\1', 'g')))
निम्नलिखित प्रश्न:
with names (name) as (
values ('StackOverflow'),
('Foo'),
('FooBar'),
('foobar'),
('StackOverflowCom')
)
select name, trim(both '_' from lower(regexp_replace(name, '([A-Z])','_\1', 'g'))) as new_name
from names;
रिटर्न:
name | new_name
-----------------+-------------------
StackOverflow | stack_overflow
Foo | foo
FooBar | foo_bar
foobar | foobar
StackOverflowCom | stack_overflow_com