分享

oracle decode范围求值

 hh3755 2012-07-13

Oracle:Decode在时间范围中的使用.

作者:暗黑破坏神  来源:博客园  发布时间:2010-04-15 15:55  阅读:193 次  原文链接   [收藏]  
数据表里有一个字段叫test_Time,存储的内容为测试时间,yyyy-mm-dd HH24:Mi:SS
我在做查询的时候需要下一个sql,需要select test_time出来,如果test_TimeHH24:Mi:SS70000190000返回白班,否则返回夜班,这个decode 知道怎么写,我尝试过直接把time的小时截取出来,但是不知道如何比较,不能转换为数字类型的出来,把小时to_date(截取的小 时,HH24:Mi:SS')转换之后它又自动在前面加上了天,我不知道怎么写这个decode,知道的大侠指点一下啊,拜领!

select case when to_number(to_char(test_time, 'hh24')) between 7 and 19 then '白班'
            else '
夜班'
        end
  from (select to_date('2008-12-5 10:00:00', 'yyyy-mm-dd hh24:mi:ss') test_time
          from dual
      ) t
;


SQL> SELECT MYDATE,

  2         DECODE(SIGN(MYDATE-TO_DATE(TO_CHAR(MYDATE,'YYYY-MM-DD')||'07:00:00','YYYY-MM-DD HH24:MI:SS'))

  3               *SIGN(TO_DATE(TO_CHAR(MYDATE,'YYYY-MM-DD')||'19:00:00','YYYY-MM-DD HH24:MI:SS')-MYDATE),

  4               1,'Morning Shift',

  5               0,'Morning Shift',

  6               'Afternoon Shift') CLASS_TYPE

  7    FROM TABLE_NAME TT;

MYDATE                                             CLASS_TYPE

-------------------------------------------------- ---------------

2008-12-3 6:30:55                                  Afternoon Shift

2008-12-3 10:42:33                                 Morning Shift

2008-12-3 19:22:36                                 Afternoon Shift

2008-12-3 19:00:00                                 Morning Shift

2008-12-4 7:00:00                                  Morning Shift

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约