我有一个字符串列,其值如下所示
Column A
(9167)
1042
21463
9979
(26351)
我需要输出如下 -
Output
-9167
1042
21463
9979
-26351
我需要修剪括号并使用更新语句将其替换为“ - ”符号。我们有办法用查询吗?
答案 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