解决方案 »
- 求助:在局域网中,用PL/SQL可以连接oracle数据库,但查看表结构和执行sql就假死
- 性能调优问题!
- oracle dblink小问题
- oracle查询 求百分比
- db buffer cache使用
- 【觅秘】请问一下在客户段PL/SQL中DML语句(INSERT/UPDATE/DELETE),经办时间是以服务器时间计入系统数据库,还是以客户端时间计入系统数据库??
- 求toad for oracle使用教程
- Sql plus 和pl/sql指令区别大吗?
- 哪位大侠帮忙,我的OMS连不上去,不知道怎样登录!在线等
- 一个很简单的问题,但是我不知道:)请帮忙!vb中odbc访问oracle数据库,connectstring怎么写?
- 急 在线等oracle 截取特殊符号之间的数字
- oracle从aix服务器导出到另一台aix服务器造成数据超过字段长度
select REGEXP_SUBSTR(str, '[^1]*1', 1, LEVEL) STR,level RN
from (select '10010001' str from dual)
CONNECT BY LEVEL <= REGEXP_COUNT(str, '1') + 1
)where str is not null
执行结果
STR CODE
1 1
001 4
0001 8
select INSTR(str, '1', 1, LEVEL) STR
from (select '10010001' str from dual)
CONNECT BY LEVEL <= REGEXP_COUNT(str, '1')
执行结果
STR
1
4
8
此函数11G之后可用,以前的版本可以替换成这样
length(str)-length(replace(str,'1',''))
我的意思是在where语句里如何判断该字段的值是否包含某几个编码?你提供的这种方法好像不能满足我的需求:用户选择几个编码,从数据库中获取该字段包含这几个编码中的一个或者多个的所有记录。
里面的正则表达式根据你设定的几个编码生成
假设制定3个code 分别为C1 C2 C3,正则表达式如下方式生成
'^([0|1]{'||(C1-1)||'}|^[0|1]{'||(C2-1)||'}|^[0|1]{'||(C3-1)||'})1'
下面语句是3个code为1、4、8时生成的正则表达式,只要包含其中一个就可以查出来
select * from 你的表名
WHERE REGEXP_LIKE(你的字段,'^([0|1]{0}|^[0|1]{3}|^[0|1]{7})1');
with codeconfig as(
select rownum id, lpad('1',rownum,'0') value from dual
connect by rownum<=20)
--数据表
,t_data as(
select '10010001' num from dual)select (select wm_concat(id) from codeconfig
where regexp_like(t_data.num,'^'||replace(value,'0','(0|1)')) ) codes
from t_data--是否包含编码4
--编码表
with codeconfig as(
select rownum id, lpad('1',rownum,'0') value from dual
connect by rownum<=20)
--数据表
,t_data as(
select '10010001' num from dual)select case when regexp_like(num,(
select '^'||replace(x.value,'0','(0|1)')
from codeconfig x where x.id=4)
) then '是' else '否' end flag from t_data