2

我想更改下划线分隔的字符串:

my_underscore_separated_string

进入骆驼案例:

MyUnderscoreSeparatedString

用一条 SQL 语句。进行这种转换的最佳方法是什么(在 Oracle 的表中)?

我可以将下划线与 REGEXP_REPLACE 匹配,但无法更改反向引用的大小写。INSTR/SUBSTR 操作只允许我一次转换一个下划线。

4

2 回答 2

5

如何使用 SQL(在 Oracle 中)将下划线分隔的单词转换为驼峰式:

  1. 用空格替换所有下划线。

  2. 对字符串使用此函数:INITCAP(string)

  3. 然后用空白字符串替换所有空格。

您应该能够在一行中做到这一点。SQL 没有针对这些类型的字符串操作任务进行优化,所以如果你做了很多这些,预计它会花费太长时间。

于 2013-01-30T19:37:33.153 回答
0

一个小的 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;
/
于 2013-01-30T19:23:54.853 回答