oracle sql 查询数字列,Oracle中的SQL查询,用于查找varchar列中表示的范围字段中的数字...

你可以像这样创建一个PL / SQL函数:

function value_included (p_value in number, p_ranges in varchar2)

return number

is

l_ranges_tab apex_application_global.vc_arr2;

l_values_tab apex_application_global.vc_arr2;

l_retval number := 0;

begin

l_ranges_tab := apex_util.string_to_table (p_ranges, ',');

for i in 1..l_ranges_tab.count loop

l_values_tab := apex_util.string_to_table (l_ranges_tab(i), '-');

if l_values_tab.count = 1 then

if p_value = l_values_tab(1) then

l_retval := 1;

exit;

end if;

else

if p_value between l_values_tab(1) and l_values_tab(2) then

l_retval := 1;

exit;

end if;

end if;

end loop;

return l_retval;

end;

如果值包含在范围内,则返回1,否则返回0,可以像这样使用:

select color from colors where value_included(5, ranges);

可以编写类似的函数来处理重叠范围:

function range_overlap (p_from in number, p_to in number, p_ranges in varchar2)

return number

is

l_ranges_tab apex_application_global.vc_arr2;

l_values_tab apex_application_global.vc_arr2;

l_retval number := 0;

begin

l_ranges_tab := apex_util.string_to_table (p_ranges, ',');

for i in 1..l_ranges_tab.count loop

l_values_tab := apex_util.string_to_table (l_ranges_tab(i), '-');

if l_values_tab.count = 1 then

if l_values_tab(1) between p_from and p_to then

l_retval := 1;

exit;

end if;

else

if p_to >= l_values_tab(1) and p_from <= l_values_tab(2) then

l_retval := 1;

exit;

end if;

end if;

end loop;

return l_retval;

end;

注意:apex_util.string_to_table函数在最新版本的Oracle中作为标准提供;在早期版本中,您可能需要编写自己的字符串解析器函数,就像这样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值