case与decode的区别

  • 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的解释

你可能感兴趣的:(sql,Hibernate,ibatis,jdbc,jpa)