解决方案 »
- 不同数据库导入导出(增量数据抽取)
- 請教:RHEL5中oracle database 10g express安裝以及怎樣配置
- 请写一第复杂查询语句
- 能否在删除数据时使用casade关键字?
- 这样的sql语句怎么写?在线等待,高人指点......!!!!!!!
- 菜鸟级的问题 Oracle9.2 Redhat 9.0
- gcc怎么安装怎么用??急
- 数据导出导入问题(csv)
- 如何在大型数据表(百万条记录以上)中快速访问及操作数据库记录,如何实现?
- 客户端连接oracle提示ora12170 tns连接超时
- 急 在线等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