紧急求一个SQL的写法:关于decode或case when;

lee_lee 2002-12-05 10:25:40
要求:如果字段id的第一位为1或2,显示为a,前两位为33或44,则显示为bb,前三位为555或666,则显示为ccc,这个SQL该怎么写?最好用decode,case when好象效率不高。
谢谢!
...全文
93 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jlandzpa 2002-12-05
  • 打赏
  • 举报
回复
为什么不自己去查查decode函数的用法?
cyberflying 2002-12-05
  • 打赏
  • 举报
回复
原来substr()可以直接对数值操作啊,又学了一招
beckhambobo 2002-12-05
  • 打赏
  • 举报
回复
呵呵,sorry!!

SQL> select decode(substr(555,1,1),1,'a',2,'a',(decode(substr(555,1,2),33,'bb',44,'bb',(decode(subst
r(555,1,3),555,'ccc',666,'ccc',''))))) from dual;

DEC
---
ccc
cyberflying 2002-12-05
  • 打赏
  • 举报
回复
没有把,我连接了的啊
snowy_howe 2002-12-05
  • 打赏
  • 举报
回复
赫赫,楼上的把一个字段变成3个字段拉
select decode(substr(id,1,1),1,'a',2,'a',
     (decode(substr(id,1,2),33,'bb',44,'bb',
       (decode(subtr(id,1,3),555,'ccc',666,'ccc',''))))
from tablename;

cyberflying 2002-12-05
  • 打赏
  • 举报
回复
select decode(substr(id,1,1),'1','a','2','a','') || decode(substr(id,1,2),'33','bb','44','bb','') || decode(subtr(id,1,3),'555','ccc','666','ccc','') form yourtable;


如果你的id是数值型的话,就用to_char(id)替换id
beckhambobo 2002-12-05
  • 打赏
  • 举报
回复
效率就具体到你的表结构了!!
beckhambobo 2002-12-05
  • 打赏
  • 举报
回复
select decode(substr(id,1,1),1,'a',2,'a','') a,decode(substr(id,1,2),33,'bb',44,'bb','') b,decode(subtr(id,1,3),555,'ccc',666,'ccc','') c form table;
yuxuan 2002-12-05
  • 打赏
  • 举报
回复
如果数据量大用内置函数会忽略索引,效率不高。

与表设计有关

17,086

社区成员

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

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