Oracle查询将带括号的值转换为负数

时间:2018-02-15 18:15:50

标签: sql oracle

我有一个字符串列,其值如下所示

Column A
(9167)
1042
21463
9979
(26351)

我需要输出如下 -

Output
-9167
1042
21463
9979
-26351

我需要修剪括号并使用更新语句将其替换为“ - ”符号。我们有办法用查询吗?

2 个答案:

答案 0 :(得分:2)

使用翻译'从字符','到字符'

正如用户指南所述,“TRANSLATE允许您在一次操作中进行多个单字符,一对一替换。”

只需按如下方式映射替换字符:

来自:()

至:-

其中第一个字符(映射到第一个字符-

其中第2个字符)被映射到第2个字符,该字符不存在,因此为null

   SCOTT@db>WITH tst AS (
  2      SELECT
  3          '(9167)' val FROM
  4          dual
  5          union all
  6          select 
  7  '1042' val FROM
  8          dual
  9          union all
 10          select 
 11  '21463' val FROM
 12          dual
 13          union all
 14          select 
 15  '9979' val FROM
 16          dual
 17          union all
 18          select 
 19  '(26351)' val
 20      FROM
 21          dual
 22  ) SELECT
 23      translate(t.val,'()','-')
 24    FROM
 25      tst t;

TRANSLA
-------
-9167  
1042   
21463  
9979   
-26351 

答案 1 :(得分:1)

这个怎么样:

with demo (column_a) as
     ( select '(9167)' from dual union all
       select '1042' from dual union all
       select '21463' from dual union all
       select '9979' from dual union all
       select '(26351)' from dual )
select column_a
     , case
           when trim(column_a) like '(%)' then
               to_number(regexp_replace(column_a,'[()]')) * -1
           else to_number(column_a)
       end as result
from   demo;

COLUMN_A     RESULT
-------- ----------
(9167)        -9167
1042           1042
21463         21463
9979           9979
(26351)      -26351