替换和删除前导字符

时间:2018-03-13 18:40:27

标签: sql oracle

我有这个查询 Select Distinct EMPLOYEE_ID from TABLE 如果此人的ID以000开头,那么这会返回一堆带有前导零的员工ID,那么它应该是一个' e'如果它是00那么它应该是一个' u' 所以,例如,如果我有 0041258这应该在结果中显示为u41258,如果我有的话 00041258那么这应该显示为e41258 有没有办法以更有效的方式修剪和替换使用substr和Case语句?如果没有,请告诉我如何在这种情况下使用substr和Case语句

3 个答案:

答案 0 :(得分:0)

好吧,你可以使用case

select (case when employee_id like '000%' then 'e' || substr(employee_id, 4)
             when employee_id like '00%' then 'u' || substr(employee_id, 3)
             else employee_id
        end)

我怀疑有一种比这更有效的方法。

答案 1 :(得分:0)

使用嵌套正则表达式的选项:

SQL> with test (id) as
  2    (select '0041258'  from dual union
  3     select '00041258' from dual
  4    )
  5  select id,
  6    regexp_replace(regexp_replace(id, '^000', 'e'), '^00', 'u') result
  7  from test;

ID       RESULT
-------- --------------------
00041258 e41258
0041258  u41258

SQL>

答案 2 :(得分:0)

假设您需要编写update语句(以永久更改ID):

update <table>  
  set   employee_id = case when employee_id like '000%' 
                             then 'e' || substr(employee_id, 4)
                           else   'u' || substr(employee_id, 3) end
  where employee_id like '00%'
;