SQL如何批量替换字符?

huang_w 2014-01-02 09:27:18
表名 a
字段name
字段里面的值有如:v_abc_type
替换成vAbcType
就是把name字段中的值带下划线的都变成java驼峰格式的组合,下划线去掉并将下划线右边的字母变成大写
高手来帮忙一下
谢谢~
...全文
272 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
_拙计 2014-01-02
  • 打赏
  • 举报
回复
引用 3 楼 z_shousi 的回复:
[quote=引用 1 楼 lu010610 的回复:] 给你写个转换函数
create or replace function ff_lwb (in_str varchar2)--将字符串转为驼峰格式
return varchar2 is
  v_start  varchar2(100);
  v_endstr varchar2(100);
begin
  v_start := in_str;
  if instr(v_start, '_') = 0 then
    v_endstr := v_start;
  else
    select replace(v_start,
                   substr(v_start, instr(v_start, '_'), 2),
                   upper(substr(v_start, instr(v_start, '_') + 1, 1)))--upper将小写转为大写
      into v_endstr
      from dual;
    v_start := v_endstr;
    select ff_lwb(v_start) into v_endstr from dual;
  end if;
  return v_endstr;
exception
  when others then
    return in_str;
end;
这样应该就会了吧
这个不错...但是你的循环为什么是function调用循环?为啥部内部Loop循环:

create or replace function ff_lwb2 (in_str varchar2)--将字符串转为驼峰格式
return varchar2 is
  v_start  varchar2(100);
  v_endstr varchar2(100);
begin
  v_start := in_str;
  loop
  if instr(v_start, '_') = 0 then
    v_endstr := v_start;
    exit;
  else
    select replace(v_start,
                   substr(v_start, instr(v_start, '_'), 2),
                   upper(substr(v_start, instr(v_start, '_') + 1, 1)))--upper将小写转为大写
      into v_endstr
      from dual;
    v_start := v_endstr;
  end if;
  end loop;
  return v_endstr;
exception
  when others then
    return in_str;
end;
[/quote]java程序写多了
  • 打赏
  • 举报
回复
引用 1 楼 lu010610 的回复:
给你写个转换函数
create or replace function ff_lwb (in_str varchar2)--将字符串转为驼峰格式
return varchar2 is
  v_start  varchar2(100);
  v_endstr varchar2(100);
begin
  v_start := in_str;
  if instr(v_start, '_') = 0 then
    v_endstr := v_start;
  else
    select replace(v_start,
                   substr(v_start, instr(v_start, '_'), 2),
                   upper(substr(v_start, instr(v_start, '_') + 1, 1)))--upper将小写转为大写
      into v_endstr
      from dual;
    v_start := v_endstr;
    select ff_lwb(v_start) into v_endstr from dual;
  end if;
  return v_endstr;
exception
  when others then
    return in_str;
end;
这样应该就会了吧
这个不错...但是你的循环为什么是function调用循环?为啥部内部Loop循环:

create or replace function ff_lwb2 (in_str varchar2)--将字符串转为驼峰格式
return varchar2 is
  v_start  varchar2(100);
  v_endstr varchar2(100);
begin
  v_start := in_str;
  loop
  if instr(v_start, '_') = 0 then
    v_endstr := v_start;
    exit;
  else
    select replace(v_start,
                   substr(v_start, instr(v_start, '_'), 2),
                   upper(substr(v_start, instr(v_start, '_') + 1, 1)))--upper将小写转为大写
      into v_endstr
      from dual;
    v_start := v_endstr;
  end if;
  end loop;
  return v_endstr;
exception
  when others then
    return in_str;
end;
snbxp 2014-01-02
  • 打赏
  • 举报
回复

SELECT REPLACE(NLS_INITCAP('v_abc_type'),'_') FROM DUAL
_拙计 2014-01-02
  • 打赏
  • 举报
回复
给你写个转换函数
create or replace function ff_lwb (in_str varchar2)--将字符串转为驼峰格式
return varchar2 is
  v_start  varchar2(100);
  v_endstr varchar2(100);
begin
  v_start := in_str;
  if instr(v_start, '_') = 0 then
    v_endstr := v_start;
  else
    select replace(v_start,
                   substr(v_start, instr(v_start, '_'), 2),
                   upper(substr(v_start, instr(v_start, '_') + 1, 1)))--upper将小写转为大写
      into v_endstr
      from dual;
    v_start := v_endstr;
    select ff_lwb(v_start) into v_endstr from dual;
  end if;
  return v_endstr;
exception
  when others then
    return in_str;
end;
这样应该就会了吧
huang_w 2014-01-02
  • 打赏
  • 举报
回复
引用 1 楼 lu010610 的回复:
给你写个转换函数
create or replace function ff_lwb (in_str varchar2)--将字符串转为驼峰格式
return varchar2 is
  v_start  varchar2(100);
  v_endstr varchar2(100);
begin
  v_start := in_str;
  if instr(v_start, '_') = 0 then
    v_endstr := v_start;
  else
    select replace(v_start,
                   substr(v_start, instr(v_start, '_'), 2),
                   upper(substr(v_start, instr(v_start, '_') + 1, 1)))--upper将小写转为大写
      into v_endstr
      from dual;
    v_start := v_endstr;
    select ff_lwb(v_start) into v_endstr from dual;
  end if;
  return v_endstr;
exception
  when others then
    return in_str;
end;
这样应该就会了吧
真给力!!

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧