我想更改下划线分隔的字符串:
my_underscore_separated_string
进入骆驼案例:
MyUnderscoreSeparatedString
用一条 SQL 语句。进行这种转换的最佳方法是什么(在 Oracle 的表中)?
我可以将下划线与 REGEXP_REPLACE 匹配,但无法更改反向引用的大小写。INSTR/SUBSTR 操作只允许我一次转换一个下划线。
我想更改下划线分隔的字符串:
my_underscore_separated_string
进入骆驼案例:
MyUnderscoreSeparatedString
用一条 SQL 语句。进行这种转换的最佳方法是什么(在 Oracle 的表中)?
我可以将下划线与 REGEXP_REPLACE 匹配,但无法更改反向引用的大小写。INSTR/SUBSTR 操作只允许我一次转换一个下划线。
如何使用 SQL(在 Oracle 中)将下划线分隔的单词转换为驼峰式:
用空格替换所有下划线。
对字符串使用此函数:INITCAP(string)
然后用空白字符串替换所有空格。
您应该能够在一行中做到这一点。SQL 没有针对这些类型的字符串操作任务进行优化,所以如果你做了很多这些,预计它会花费太长时间。
一个小的 PL/SQL 包装器可以重复运行转换,直到找不到更多的下划线。我添加了一些额外的语句来匹配我公司的驼峰式约定(首字母大写和大写的“ID”)。
UPDATE md_field SET NAME = lower(NAME) WHERE NAME LIKE '%\_%' ESCAPE '\';
UPDATE md_field SET NAME = upper(substr(NAME, 1, 1))||substr(NAME, 2) WHERE NAME LIKE '%\_%' ESCAPE '\';
UPDATE md_field SET NAME = REPLACE(NAME, 'id', 'ID') WHERE NAME LIKE '%\_%' ESCAPE '\';
DECLARE
vsql LONG;
v_cnt NUMBER;
BEGIN
LOOP
vsql := 'UPDATE md_field SET NAME = substr(NAME, 1, instr(NAME, ''_'')-1)||upper(substr(NAME, instr(NAME, ''_'')+1, 1))||substr(NAME, instr(NAME, ''_'')+2) WHERE NAME LIKE ''%\_%'' ESCAPE ''\''';
EXECUTE IMMEDIATE vsql;
SELECT COUNT (*) INTO v_cnt FROM md_field WHERE NAME LIKE '%\_%' ESCAPE '\';
EXIT WHEN v_cnt = 0;
END LOOP;
END;
/