1. Oracle数据库字段拆分
sql">SELECTREGEXP_SUBSTR(t.PATH_IDS||',','[^,]+',1,1),
REGEXP_SUBSTR(t.PATH_IDS||',','[^,]+',1,2),
REGEXP_SUBSTR(t.PATH_IDS||',','[^,]+',1,3),
DECODE(REGEXP_SUBSTR(t.PATH_IDS||',','[^,]+',1,5),NULL,NULL,REGEXP_SUBSTR(t.PATH_IDS||',','[^,]+',1,4)),
DECODE(REGEXP_SUBSTR(t.PATH_IDS||',','[^,]+',1,5),NULL,REGEXP_SUBSTR(t.PATH_IDS||',','[^,]+',1,4),REGEXP_SUBSTR(t.PATH_IDS||',','[^,]+',1,5))
FROM机构层级关系表t
前三列根据正则匹配,获取对应的分割后的值,没有啥讲的,
第四列要判断是否存在第五列,如果不存在,则第四列要空,存在则用第四列的值
第五列要判断是否存在第五列,如果不存在,则给第四列的值,存在则用第五列的值
2. 数据库水平拆分和垂直拆分 怎么实现
垂直拆分
垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表
通常我们按以下原则进行垂直拆分:
把不常用的字段单独放在一张表;
把text,blob等大字段拆分出来放在附表中;
经常组合查询的列放在一张表中;垂直拆分更多时候就应该在数据表设计之初就执行的步骤,然后查询的时候用join关键起来即可;
水平拆分
水平拆分是指数据表行的拆分,表的行数超过200万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放。
水平拆分的一些技巧
1. 拆分原则
通常情况下,我们使用取模的方式来进行表的拆分;比如一张有400W的用户表users,为提高其查询效率我们把其分成4张表
users1,users2,users3,users4
通过用ID取模的方法把数据分散到四张表内Id%4+1 = [1,2,3,4]
这里是个小哈希,然后查询,更新,删除也是通过取模的方法来查询
$_GET['id'] = 17,
17%4 + 1 = 2,
$tableName = 'users'.'2'
Select * from users2 where id = 17;
在insert时还需要一张临时表uid_temp来提供自增的ID,该表的唯一用处就是提供自增的ID;
insert into uid_temp values(null);
得到自增的ID后,又通过取模法进行分表插入;
注意,进行水平拆分后的表,字段的列和类型和原表应该是相同的,但是要记得去掉auto_increment自增长
另外
部分业务逻辑也可以通过地区,年份等字段来进行归档拆分;
进行拆分后的表,只能满足部分查询的高效查询需求,这时我们就要在产品策划上,从界面上约束用户查询行为。比如我们是按年来进行归档拆分的,这个时候在页面设计上就约束用户必须要先选择年,然后才能进行查询;
在做分析或者统计时,由于是自己人的需求,多点等待其实是没关系的,并且并发很低,这个时候可以用union把所有表都组合成一张视图来进行查询,然后再进行查询;
Create view users as select from users1 union select from users2 union.........
3. 数据库字段分割问题
认真分解一下呗,这么简单:
1==> :这个是第一行开始的标记。
<+_+>:这个是记录与记录之间的分割符号。
<@_@>:这个是字段与字段之间的分割符号。
然后如果是在C#里分分割就编程呗。
如果想要在数据库里面分割,就写一个存储过程呗。
4. 如何用ACCESS数据库拆分数据
方法一
1、通过Sql语句,然后使用Docmd.runsql 或Currentdb.Execute 执行Sql语句批量拆分
2、通过DAO或ADO 使用Recordset记录集来循环插入,这个需要懂VBA代码及Do while循环
希望可帮到你
5. 关于ACCESS数据库,字段拆分
SELECT Left([Condition],InStr([condition],"/")-1) AS 字段1, Mid([Condition],InStr([condition],"/")+1,InStr(Mid([condition],InStr([condition],"/")+1),"/")-1) AS 字段2, Mid(Mid([condition],InStr(Mid([condition],InStr([condition],"/")+1),"/")-1),InStr(Mid([condition],InStr(Mid([condition],InStr([condition],"/")+1),"/")-1),"/")+1) AS 字段3
FROM temp;
6. oracle数据库拆分字段lenth*width*higth字段
建表,模拟上面说的情况,一个字符串字段和三个数值字段,并增加一些记录。
CREATETABLEt(lenthnumber,WIDTHnumber,higthNUMBER,cuboVARCHAR2(100));
INSERTINTOtVALUES(0,0,0,'100*20*50');
INSERTINTOtVALUES(0,0,0,'200*10*40');
思路是,增加一个中间字段,用字符串赋值中间字段,逐项分离,最后删掉中间字段。
ALTERTABLEtADD(midVARCHAR2(100));
UPDATEtSETmid=cubo;
UPDATEtSETlenth=SUBSTR(mid,1,instr(mid,'*')-1),mid=SUBSTR(mid,instr(mid,'*')+1);
UPDATEtSETWIDTH=SUBSTR(mid,1,instr(mid,'*')-1),mid=SUBSTR(mid,instr(mid,'*')+1);
UPDATEtSEThigth=mid;
ALTERTABLEtDROPCOLUMNmid;
7. oracle数据库,怎样能把表中的字段按规律拆分并显示出来
1、首先需要sys或system权限操作
2、查询需要更改表的ID
select object_id from all_objects where owner = 'ITHOME'
and object_name = 'TEST';1234
注:ITHOME为用户,TEST是要更改的表,表名要大写
3、通过ID查出该表所有字段的顺序
select obj#, col#, name
from sys.col$
where obj# = '103756' order by col#123
4、修改顺序
update sys.col$ set col#=2 where obj#=103756 and name='AGE';update sys.col$ set col#=3 where obj#=103756 and name='NAME';12
或直接在第三步的语句后面加for update进行修改
最后commit提交 并且重启Oracle服务
8. 视图中如何根据数据库的字段拆分分别显示记录
oracle 数据库拆分字段的实现方法:
用正则表达式拆分某一个字段,比如有a,b,c,d,e
sql写法如下:
select regexp_substr('a,b,c,d,e,','[^,]+',1,rownum)
from al connect by rownum<=length(regexp_replace('a,b,c,', '[^,]', null))
结果:
执行结果如下:
1 a
2 b
3 c
4 d
5 e
9. oracle中怎么把按'+'拆分字段进行分组
oracle 数据库拆分字段的实现方法:
用正则表达式拆分某一个字段,比如有a,b,c,d,e
sql写法如下:
select regexp_substr('a,b,c,d,e,','[^,]+',1,rownum)
from al connect by rownum<=length(regexp_replace('a,b,c,', '[^,]', null))
结果:
执行结果如下:
1 a
2 b
3 c
4 d
5 e