以下是一張就可以了。使用TRANSLATE()將小數點符號替換爲小數點,並同時移除百分號。如果超過1則返回。
SQL> with tbl(data) as (
select '.5%' from dual union
select '0%' from dual union
select '<1%' from dual union
select '65%' from dual union
select '65.5%' from dual union
select '65.4%' from dual
)
select data BEFORE,
case
when translate(data, '<%', '.') < 1
then to_char(cast(translate(data, '<%', '.') as float))
when translate(data, '<%', '.') > 1
then to_char(round(cast(replace(data, '%') as float)))
end AFTER
from tbl;
BEFOR AFTER
----- ----------------------------------------
.5% .5
0% 0
65% 65
65.4% 65
65.5% 66
<1% .1
6 rows selected.
SQL>
不需要Regex。除去'%'轉換爲'float/double',然後使用'CASE'格式化輸出。 –
'0.5%'小於'1%'爲什麼'.5'而不是'.1'作爲第三個樣本。 –
感謝胡安卡洛斯,我會這樣做,我想我只是卡住了,因爲它是一組字符串,可能與我在CASE中處理的實際字符串文本有關,並且感覺需要處理所有「數字」作爲一個 因爲給我數據的人很傻,而且我得到的字符串'<1%'我被告知要轉換成.1,而'.5%'等等仍然是可能的。 – Emma