我正在尝试在某个范围内搜索61 123456
之类的数字。它在db中存储为varchar。
我做了类似的事,
TO_NUMBER(REGEXP_REPLACE(’61 123456′),'\s') BETWEEN TO_NUMBER(REGEXP_REPLACE(TN_RANGE_STRT,’\s’)) AND TO_NUMBER(REGEXP_REPLACE(TN_RANGE_END,’\s’))
但是,它没有用。
在数据库中,范围存储为61 123455-61 123465
请帮帮我。
答案 0 :(得分:0)
假设必须将'61 123455'
这样的字符串转换为数字61.123.455
,并且范围的格式是固定的,您可能需要这样的内容:
with yourTable(range) as (
select '61 123455-61 123465' from dual union
select '61 100-61 200' from dual
)
select *
from yourTable
where to_number(replace('61 123456', ' ', '')) between
to_number(replace(regexp_substr(range, '[0-9 ]*'), ' ', '')) AND
to_number(replace(regexp_substr(range, '(-)([0-9 ]*)', 1, 1, 'i', 2), ' ', ''))