zoukankan      html  css  js  c++  java
  • decode()与case then 学习与使用

    今天做项目的时候遇到一个oracle数值转换的问题,按需求需要对匹配系统时间进行固定赋值,为了避免增加复杂度并易于维护,尽量不要使用存储过程或触发器,最好是使用oracle 自带函数。

    如:

    SQL> select to_char(sysdate,'yyyyMMddhh24mi') as time from dual;

    TIME
    ------------
    201602292302

    需要对年月日时分的分做判断,若系统时间分钟值大于或等于30,则值固定为30 ,若值小于30 则判断为0;

    首先想到的是用 decode 函数:

    含义解释:
    decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)

    该函数的含义如下:
    IF 条件=值1 THEN
        RETURN(翻译值1)
    ELSIF 条件=值2 THEN
        RETURN(翻译值2)
        ......
    ELSIF 条件=值n THEN
        RETURN(翻译值n)
    ELSE
        RETURN(缺省值)
    END IF

    然后发现只是值的判断而已,使用decode 的确可以实现,但无疑造成很大的麻烦,比写个存储过程或触发器还麻烦复杂。

    找了下资料,发现可以用oracle的 when case then else end  表达式:

    Case when 的用法,简单Case函数 
    简单CASE表达式,使用表达式确定返回值.

      语法:

      CASE search_expression

      WHEN expression1 THEN result1

      WHEN expression2 THEN result2

      ...

      WHEN expressionN THEN resultN

      ELSE default_result

     搜索CASE表达式,使用条件确定返回值.

      语法:

      CASE

      WHEN condition1 THEN result1

      WHEN condistion2 THEN result2

      ...

      WHEN condistionN THEN resultN

      ELSE default_result

      END

    然后,测试是否可行:

    SQL> select case when to_char(sysdate,'mi')>=30 then 30 else 0 end Decide from dual ;

    DECIDE
    ----------
    30

    最后按项目需要的sql为:

    SQL> select to_char(sysdate,'yyyyMMddhh24')||''||Decide as time from dual,
    2 ( select case when to_char(sysdate,'mi')>=30 then '30' else '00' end Decide from dual ) a ;

    TIME
    ------------
    201602292300

  • 相关阅读:
    如何将自己的做的Silverlight项目发布到博客园中
    JS对当前时间的操作
    rt—移植笔记1
    rt—移植笔记2(Lwip)
    RabbitMQ一:Windows安装RabbitMQ Server
    Redis实现分布式锁
    ssh前后台交互, list传输到前后展示,table传输到台数据!!!。ssh对象传输
    Delphi中API编程编译实现
    struts2简单遍历Map
    phonegap file操作
  • 原文地址:https://www.cnblogs.com/illusioned/p/5229303.html
Copyright © 2011-2022 走看看