通过使用to_number转换varchar来搜索范围内有空格的varchar

时间:2018-06-06 06:32:08

标签: regex oracle

我正在尝试在某个范围内搜索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

请帮帮我。

1 个答案:

答案 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), ' ', ''))