在case语句中使用regexp_like和condition

时间:2014-05-09 07:04:20

标签: sql oracle

我在表格中有这些数据

emp_id   emp_sal   emp_addr
1        1000      10-jul-13
2        2000      00002000
3        3000      AMP
4        4000      10-oct-2013
5        5000      0.1122
9        9000      panna
10       1000      10-oct-13
11       1000      -60
12       1010      10-10-10
13       1010      10-10-2010

我想选择条件为

的所有数据
  1. 如果emp_addr在dd-mon-yy中有日期,那么应该按原样来。
  2. 如果emp_addr的日期是dd-mm-yy那么应该是dd-mon-yy。
  3. 如果emp_addr有数字或字符,则默认日期应为'31 -31-2099'。
  4. 我试过这个问题: -

    select * from sunil_test 
    WHERE emp_id in (1,2,3,4,5,9,10,11,12,13)
      and case when regexp_like(emp_addr
                             , '[[:digit:]]{2}-[[:alpha:]]{3}-[[:digit:]]{2}') 
               then emp_addr
               when regexp_like(emp_addr
                            , '[[:digit:]]{2}-[[:digit:]]{2}-[[:digit:]]{2}') 
               then to_char(to_date(emp_addr,'dd-mm-yy'),'dd-mon-yy')
               else '31-31-99'
          end = 1
    

    我必须在where子句中使用这些条件,并且只使用SQL而不是PLSQL。

0 个答案:

没有答案