万分火急求助一条字符串截取的sql语句

guolifang2008 2013-09-30 10:31:41
有一个字段item,其内容样式的“名称[规格]{型号}”,其实是三个字段的合并。
现在想把“名称”从item中取出,如何截取呢?
item内容的标准样式是“名称[规格]{型号}”,
没有规格的时候就是“名称{型号}”,
没有型号的时候就是“名称[规格]”,
规格型号都没有的时候就是“名称”。

试了半天了,都不行,实在无奈,请高手帮忙解决,万分感谢!
...全文
680 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zha_sir 2015-02-13
  • 打赏
  • 举报
回复
可以使用substr和instr来截取sql语句
绕天涯_2014 2015-02-04
  • 打赏
  • 举报
回复
使用decode判断列值的数据,根据值判断返回对应的结果
CT_LXL 2015-02-04
  • 打赏
  • 举报
回复
引用 楼主 u012296835 的回复:

with t as
 (select 's2s[aa]{xx}' str
    from dual
  union all
  select 's..s2s[aa]' str
    from dual
  union all
  select 's2s{xx}' str
    from dual
  union all
  select 'xxs2?s' str
    from dual)
select substr(str,
              1,
              decode(regexp_instr(str, '[\[|\{]'),
                     0,
                     length(str),
                     regexp_instr(str, '[\[|\{]') - 1))
  from t;
  • 打赏
  • 举报
回复
with tmp as
( select '名称[规格]{型号}' as str from dual
union all select '名称[规格]' from dual
union all select '名称{型号}' from dual
union all select '名称' from dual)
select substr(str,1,case when instr(str,'[') > 0 then instr(str,'[') - 1
when instr(str,'{') > 0 then instr(str,'{') - 1
else length(str) end ) as a
from tmp
无敌小二傻 2013-09-30
  • 打赏
  • 举报
回复
case when 规格 is not null and 型号 is not null then substr(col,0,instr(col,'[')-1) when 规格 is null then substr(col,0,instr(col,'{')-1) when 型号 is null then substr(col,0,instr(col,'[')-1) else col end
shiyiwan 2013-09-30
  • 打赏
  • 举报
回复
第一个else里面掉了对大括号的判断,需要加上,。
shiyiwan 2013-09-30
  • 打赏
  • 举报
回复
CREATE OR REPLACE PROCEDURE idsp(item IN VARCHAR2) IS
  v_bkt_pos NUMBER;
  v_bce_pos NUMBER;
BEGIN
  SELECT instr(item, '['), instr(item, '{') INTO v_bkt_pos, v_bce_pos FROM dual;
  IF v_bkt_pos = 0
  THEN
    IF v_bce_pos = 0
    THEN
      dbms_output.put_line(item);
    ELSE
      dbms_output.put_line(substr(item, 1, v_bce_pos - 1));
    END IF;
  
  ELSE
    dbms_output.put_line(substr(item, 1, v_bkt_pos - 1));
  END IF;
END;
自己转成function吧。
guolifang2008 2013-09-30
  • 打赏
  • 举报
回复
其实我是想用一个函数能把这个实现,就是取一个字段(item)里的名称部分,就是“[”前的部分,没有“[”的取“{”前的部分,“[”和“{”都没有的,就取item本身,就不用截取了。
异常异长 2013-09-30
  • 打赏
  • 举报
回复
可以考虑自己写个function 问题在具体点可以么
ozcsdog1 2013-09-30
  • 打赏
  • 举报
回复
select DECODE( instr(item, '[') , 0 , ( DECODE( instr(item, '{') , 0 , item , substr(item, 0, instr(item, '{') - 1) ) ) , substr(item, 0, instr(item, '[') - 1) ) from table

17,086

社区成员

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

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