Oracle库有许多相当实用的函数,之前对于某些需求,许多少是从业务层或展现层实现的,比如用户性别,往往数据库中是以{‘1′,’0’}or{‘M’,’F’}形式存在的,而这种在数据在展现层必须要进行一种直观的人性化显示,不得不转为{‘男’,’女’}.
往往有几种做法:
1. 在DAO层进行数据转换,进行一个小判断:

[JAVA]

if       rs.getInt(“gender”) == ‘1’;
person.setGender(‘男’);

[/JAVA]

显然这不是一种很好的方式

2. 在展现层进行数据转换,(比如用struts标签)

[HTML]
<s:if test=”#session.person.gender==’1′”>
<s:property value=”男”/>
</s:if>
[/HTML]
这种是一个比较流行且简单的方式,再配合velocity或FreeMaker这类模板语言,会有一个比较好的开发体验

3. 这就是要说的一种从SQL上解决,这种方法虽然我用的很少,但却是很省事,当然实现上非常简单:
Oracle

[SQL]
select decode(gender,’M’,’男’,’1′,’男’,’null’,’中性’) as gender1 from person
[/SQL]
这样出来的数据就是最终展现数据,不过decode函数却只能在Oracle上使用,而在Mysql这种轻量级数据库上的话,就不得不多写几个字母来实现等价功能:

MySQL:

[SQL]

select case gender
when ‘M’ then ‘男’
when ‘F’ then ‘女’
when ‘1’ then ‘男’
when ‘0’ then ‘女’
else ‘中性’
end as gender1
from person

[/SQL]

不论何种是何种方式,都取决于当前开发环境和需求考虑。。

One thought on “Oracle Decode”

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注