- decode的用法:
SELECT
DECODE
(
'持久层技术缩写',
j, 'jdbc',
h, 'hibernate',
i, 'ibatis',
j, 'JPA'
'other'
) AS '具体持久方式'
FROM 'java开发';
可以清楚的看出decode是一个一对一译码过程,这也是它为什么叫decode的原因。
- case有两种情况:
1.serach case的用法
SELECT
CASE
WHEN '女人特征' = '臭味相投'
THEN '死党'
WHEN '女人特征' = '端庄贤慧'
THEN '老婆'
WHEN '女人特征' = '善解人意'
THEN '红颜知己'
WHEN '男人特征' = '志同道合'
THEN '朋友'
WHEN '男人特征' < '道德底线'
THEN '小人远之'
ELSE '不做选择'
END AS '人际交往'
FROM '社会';
可以看出有多种选择,而且可以是不同字段,安顺序进行匹配谁先匹配上了就end,另外它可以对范围进行判断,这是decode不具备的功能
2.simple case的用法
SELECT
CASE
'持久层技术缩写',
WHEN 'j' THEN 'jdbc'
WHEN 'h' THEN 'hibernate'
WHEN 'i' THEN 'ibatis'
WHEN 'j' THEN 'JPA'
ELSE 'other'
END AS '具体持久方式'
FROM 'java开发';
这种方式其实可decode基本一样
decode用的人比较多,可能是因为它出现的比较早,case是在oracle8.1以后才加入的,在之前要在sql中实现if else的逻辑判断却需要其它辅助函数floor和sign。另外decode的用法比较简洁我觉得也是一个原因。
由于case是SQL标准, 所以使用的时候最好优先考虑case语句。
参考了:Frank Kulash的解释