以下是一张就可以了。使用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