【问题标题】:SQL to convert data from underscore-separated to CamelCaseSQL 将数据从下划线分隔转换为 CamelCase
【发布时间】:2013-01-30 19:23:54
【问题描述】:

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

my_underscore_separated_string

进入 CamelCase:

MyUnderscoreSeparatedString

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

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

【问题讨论】:

    标签: oracle plsql camelcasing


    【解决方案1】:

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

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

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

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

    您应该能够在一行中完成此操作。 SQL 并未针对此类字符串操作任务进行优化,因此如果您执行大量此类任务,预计会花费很长时间。

    【讨论】:

    • 什么是扭转局面的最佳解决方案?从 CamelCase 到 undersocre_seperation。
    【解决方案2】:

    一个小的 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;
    /
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      相关资源
      最近更新 更多