请问DCODE函数里的条件可否使用“LIKE”

[复制链接]
查看11 | 回复9 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
请问DCODE函数里的条件可否使用“LIKE”
如:DECODE(TABLE.字段 LIKE ‘%JAN%’,A,B)
谢谢!
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
在oracle 817及以上可以用case语句
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
decode 不能使用like。
有时候可以转换一下思路。比如你的例子,用decode 可以这样写:
DECODE( instr ( TABLE.字段, 'JAN') , 0, B, A)
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
非常感谢你的解答。
也就是说使用DECODE时,是不能用LIKE的。如果我不用CASE,请问还有什么办法吗?
因为从“JAN-2004”到“DEC-2004”的1-12月是行,我想转换到列,要写12行DECODE,如果
不用LIKE的话,到2005年的时候要分别去改,有些麻烦.
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
如果只是说like,不用case,是没有别的办法。
你说的行转换列,看具体的要求了。不过,你说的把月份转换为列,2005 年分别去改,具体是什么要求?
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
SELECTsum(glb.period_name,'JAN-04','A',0) 1月

sum(glb.period_name,'FEB-04','A',0) 2月

sum(glb.period_name,'MAR-04','A',0)3月.
.
.
sum(glb.period_name,'DEC-04','A',0) 12月
FROM TABLE
WHERE glb.period_name like '%04'
group by bbb
就是每次要将'JAN-04','FEB-04','MAR-04'...'DEC-04'该为'...-05'.如果可以不改这里的话,年度不同时,只需改WHERE glb.period_name like '%04'即可
非常感谢jaunt
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
你的SQL 漏写了一个DECODE 吧?可以这样写:
SELECT sum( decode( substrb(glb.period_name, 1, 3)[/COLOR],'JAN','A',0 ) ) 1月,
...
FROM TABLE
WHERE glb.period_name like '%04'
group by bbb
因为你WHERE 条件中的glb.period_name like '%04' 已经保证了是04年,所以只需要判断月份就可以了。这时WHERE 条件改成05 年,就会是05 年的月份结果了。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
学习!
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
感谢jaunt
成功了
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
glb.period_name是什么意思?
表名?
globe?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行