需要以下查询的结果
select regexp_replace('StackOverflow', 'something', 'something')
作为
stack_overflow
答案 0 :(得分:6)
以下正则表达式在每个大写字母前面添加一个下划线:
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
答案 1 :(得分:0)
我想你想要的是什么
<span title="This is good if you travel alone">
<img src="images/weekend.png" class="pic-width border-radius" />
</span>
我们在这里测试一下,
lower(
regexp_replace(
replace(column_name, ' ', '_'),
'([[:lower:]])([[:upper:]])',
'\1_\2',
'g'
)
)
这比@a_horse_with_no_name更有优势,它可以使用连续的大写字母,也可以解决空格。
另见,