Sql 将CamelCase转换为snake_case
需要以下查询的结果Sql 将CamelCase转换为snake_case,sql,postgresql,Sql,Postgresql,需要以下查询的结果 select regexp_replace('StackOverflow', 'something', 'something') 作为 以下正则表达式在每个大写字母前添加下划线: regexp_replace(name, '([A-Z])','_\1', 'g')) 由于这会导致在开头出现下划线,因此需要使用trim() 以下查询: with names (name) as ( values ('StackOverflow'), ('Foo'),
select regexp_replace('StackOverflow', 'something', 'something')
作为
以下正则表达式在每个大写字母前添加下划线:
regexp_replace(name, '([A-Z])','_\1', 'g'))
由于这会导致在开头出现下划线,因此需要使用trim()
以下查询:
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 |新名称
-----------------+-------------------
堆栈溢出|堆栈溢出
福|福
福巴|福巴
foobar | foobar
堆栈溢出com |堆栈溢出com
我想你想要什么
lower(
regexp_replace(
replace(column_name, ' ', '_'),
'([[:lower:]])([[:upper:]])',
'\1_\2',
'g'
)
)
我们在这里测试它
WITH t (name) as (
VALUES ('StackOverflow'),
('Foo'),
('FooBar'),
('foobar'),
('StackOverflowCom'),
('BLEHHHHokBaz') -- doesn't go funky
)
SELECT name, lower(
regexp_replace(
replace(name, ' ', '_'),
'([[:lower:]])([[:upper:]])',
'\1_\2',
'g'
)
) AS new_name
FROM t;
这比使用“无”名称的@a_horse_有一个优势,即它可以处理连续的大写字母,并且可以解决空格问题
也看,
lower(
regexp_replace(
replace(column_name, ' ', '_'),
'([[:lower:]])([[:upper:]])',
'\1_\2',
'g'
)
)
WITH t (name) as (
VALUES ('StackOverflow'),
('Foo'),
('FooBar'),
('foobar'),
('StackOverflowCom'),
('BLEHHHHokBaz') -- doesn't go funky
)
SELECT name, lower(
regexp_replace(
replace(name, ' ', '_'),
'([[:lower:]])([[:upper:]])',
'\1_\2',
'g'
)
) AS new_name
FROM t;