单个字段屏蔽重复出现的字符串
2017-05-18 20:28
183 查看
--NB的 case when
create table test0518(n1 date,n2 varchar2(50));
insert into test0518 values(sysdate,'0.11 0.12 0.11 0.14')
insert into test0518 values(sysdate,'0.11');
select n2,INSTR(n2, '0.11', 1, 1),INSTR(n2, '0.11', 1, 2) from test0518 ;
--第一次修改 屏蔽重复出现的字符串
SELECT n1,n2,CASE WHEN INSTR(n2, '0.11', 1, 2) > 0 THEN
SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) - 1)||
REPLACE(SUBSTR(n2,INSTR(n2, '0.11', 1, 2),LENGTH(n2)),'0.11','')
else n2 end as xxxx
from test0518;
N1 N2 XXXX
------------------ ------------------------- -----------------
2017/5/19 9:36:09 0.12 ,0.13 ,0.11 ,0.11 0.12 ,0.13 ,0.11 ,
2017/5/18 9:26:06 0.11 ,0.12 ,0.11 ,0.14 0.11 ,0.12 , ,0.14
2017/5/18 9:26:09 0.11 0.11
2017/5/18 9:56:09 0.12 ,0.11 ,0.11 ,0.13 0.12 ,0.11 , ,0.13
结果有点瑕疵,0.11 去掉了 但是剩下了 多余的 逗号
--第二次修改 去除多余的逗号
SELECT n1,n2,CASE WHEN INSTR(n2, '0.11', 1, 2) > 0 THEN --如果第二次出现的位置(13)>0 ,那么重复出现了 0.11 ,0.12 ,0.11 ,0.14
SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) - 1)|| --从左边一次性的截取到 13-1 位置 即:0.11 ,0.12 ,
REPLACE(SUBSTR(n2,INSTR(n2, '0.11', 1, 2)/*13*/,LENGTH(n2)),'0.11 ,','')
else n2 end as xxxx
from test0518;
N1 N2 XXXX
------------------ ------------------------- ------------------------
2017/5/19 9:36:09 0.12 ,0.13 ,0.11 ,0.11 0.12 ,0.13 ,0.11 ,0.11
2017/5/18 9:26:06 0.11 ,0.12 ,0.11 ,0.14 0.11 ,0.12 ,0.14
2017/5/18 9:26:09 0.11 0.11
2017/5/18 9:56:09 0.12 ,0.11 ,0.11 ,0.13 0.12 ,0.11 ,0.13
--第三次修改 改为 update case
update test0518 set n5=CASE WHEN INSTR(n2, '0.11', 1, 2) > 0 THEN --如果第二次出现的位置(13)>0 ,那么重复出现了 0.11 ,0.12 ,0.11 ,0.14
SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) - 1)|| --从左边一次性的截取到 13-1 位置 即:0.11 ,0.12 ,
REPLACE(SUBSTR(n2,INSTR(n2, '0.11', 1, 2)/*13*/,LENGTH(n2)),'0.11 ,','')
else n2 end ;
--第四次修改
SELECT n1,n2,
CASE
WHEN INSTR(n2, '0.11', 1, 2) > 0 AND INSTR(n2, '0.11', 1, 2)< LENGTH(N2)-3 THEN --0.11 ,0.12 ,0.11 ,0.14
SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) - 1)||
REPLACE(SUBSTR(n2,INSTR(n2, '0.11', 1, 2)+6,LENGTH(n2)),'0.11,','')
WHEN INSTR(n2, '0.11', 1, 2) > 0 AND INSTR(n2, '0.11', 1, 2)=LENGTH(N2)-3 THEN --0.12 ,0.13 ,0.11 ,0.11
SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) -2 )
else N2 end as COL3 --0.11
from test0518;
N1 N2 XXXX
------------------ ------------------------- ------------------------
2017/5/19 9:36:09 0.12 ,0.13 ,0.11 ,0.11 0.12 ,0.13 ,0.11
2017/5/18 9:26:06 0.11 ,0.12 ,0.11 ,0.14 0.11 ,0.12 ,0.14
2017/5/18 9:26:09 0.11 0.11
2017/5/18 9:56:09 0.12 ,0.11 ,0.11 ,0.13 0.12 ,0.11 ,0.13
--第五次修改 改为 update case
update test0518 set n6=CASE
WHEN INSTR(n2, '0.11', 1, 2) > 0 AND INSTR(n2, '0.11', 1, 2)< LENGTH(N2)-3 THEN --0.11 ,0.12 ,0.11 ,0.14
SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) - 1)||
REPLACE(SUBSTR(n2,INSTR(n2, '0.11', 1, 2)+6,LENGTH(n2)),'0.11,','')
WHEN INSTR(n2, '0.11', 1, 2) > 0 AND INSTR(n2, '0.11', 1, 2)=LENGTH(N2)-3 THEN --0.12 ,0.13 ,0.11 ,0.11
SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) -2 )
else N2 end ;
create table test0518(n1 date,n2 varchar2(50));
insert into test0518 values(sysdate,'0.11 0.12 0.11 0.14')
insert into test0518 values(sysdate,'0.11');
select n2,INSTR(n2, '0.11', 1, 1),INSTR(n2, '0.11', 1, 2) from test0518 ;
--第一次修改 屏蔽重复出现的字符串
SELECT n1,n2,CASE WHEN INSTR(n2, '0.11', 1, 2) > 0 THEN
SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) - 1)||
REPLACE(SUBSTR(n2,INSTR(n2, '0.11', 1, 2),LENGTH(n2)),'0.11','')
else n2 end as xxxx
from test0518;
N1 N2 XXXX
------------------ ------------------------- -----------------
2017/5/19 9:36:09 0.12 ,0.13 ,0.11 ,0.11 0.12 ,0.13 ,0.11 ,
2017/5/18 9:26:06 0.11 ,0.12 ,0.11 ,0.14 0.11 ,0.12 , ,0.14
2017/5/18 9:26:09 0.11 0.11
2017/5/18 9:56:09 0.12 ,0.11 ,0.11 ,0.13 0.12 ,0.11 , ,0.13
结果有点瑕疵,0.11 去掉了 但是剩下了 多余的 逗号
--第二次修改 去除多余的逗号
SELECT n1,n2,CASE WHEN INSTR(n2, '0.11', 1, 2) > 0 THEN --如果第二次出现的位置(13)>0 ,那么重复出现了 0.11 ,0.12 ,0.11 ,0.14
SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) - 1)|| --从左边一次性的截取到 13-1 位置 即:0.11 ,0.12 ,
REPLACE(SUBSTR(n2,INSTR(n2, '0.11', 1, 2)/*13*/,LENGTH(n2)),'0.11 ,','')
else n2 end as xxxx
from test0518;
N1 N2 XXXX
------------------ ------------------------- ------------------------
2017/5/19 9:36:09 0.12 ,0.13 ,0.11 ,0.11 0.12 ,0.13 ,0.11 ,0.11
2017/5/18 9:26:06 0.11 ,0.12 ,0.11 ,0.14 0.11 ,0.12 ,0.14
2017/5/18 9:26:09 0.11 0.11
2017/5/18 9:56:09 0.12 ,0.11 ,0.11 ,0.13 0.12 ,0.11 ,0.13
--第三次修改 改为 update case
update test0518 set n5=CASE WHEN INSTR(n2, '0.11', 1, 2) > 0 THEN --如果第二次出现的位置(13)>0 ,那么重复出现了 0.11 ,0.12 ,0.11 ,0.14
SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) - 1)|| --从左边一次性的截取到 13-1 位置 即:0.11 ,0.12 ,
REPLACE(SUBSTR(n2,INSTR(n2, '0.11', 1, 2)/*13*/,LENGTH(n2)),'0.11 ,','')
else n2 end ;
--第四次修改
SELECT n1,n2,
CASE
WHEN INSTR(n2, '0.11', 1, 2) > 0 AND INSTR(n2, '0.11', 1, 2)< LENGTH(N2)-3 THEN --0.11 ,0.12 ,0.11 ,0.14
SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) - 1)||
REPLACE(SUBSTR(n2,INSTR(n2, '0.11', 1, 2)+6,LENGTH(n2)),'0.11,','')
WHEN INSTR(n2, '0.11', 1, 2) > 0 AND INSTR(n2, '0.11', 1, 2)=LENGTH(N2)-3 THEN --0.12 ,0.13 ,0.11 ,0.11
SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) -2 )
else N2 end as COL3 --0.11
from test0518;
N1 N2 XXXX
------------------ ------------------------- ------------------------
2017/5/19 9:36:09 0.12 ,0.13 ,0.11 ,0.11 0.12 ,0.13 ,0.11
2017/5/18 9:26:06 0.11 ,0.12 ,0.11 ,0.14 0.11 ,0.12 ,0.14
2017/5/18 9:26:09 0.11 0.11
2017/5/18 9:56:09 0.12 ,0.11 ,0.11 ,0.13 0.12 ,0.11 ,0.13
--第五次修改 改为 update case
update test0518 set n6=CASE
WHEN INSTR(n2, '0.11', 1, 2) > 0 AND INSTR(n2, '0.11', 1, 2)< LENGTH(N2)-3 THEN --0.11 ,0.12 ,0.11 ,0.14
SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) - 1)||
REPLACE(SUBSTR(n2,INSTR(n2, '0.11', 1, 2)+6,LENGTH(n2)),'0.11,','')
WHEN INSTR(n2, '0.11', 1, 2) > 0 AND INSTR(n2, '0.11', 1, 2)=LENGTH(N2)-3 THEN --0.12 ,0.13 ,0.11 ,0.11
SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) -2 )
else N2 end ;
相关文章推荐
- 求字符串中某字符重复出现次数
- 用java实现,查找字符串中第一个没有重复出现的字符
- VBS去除字符串的重复项并统计重复字符出现的次数
- access自动编号字段出现重复
- access自动编号字段出现重复
- 替换重复出现字符串
- 关于Devexpress xtraGrid中数字字段删除数字后出现输入字符串格式不正确问题的解决方案
- 统计一个字符串的重复字符出现的字数
- java获取字符串中重复出现的字符
- 在select sqlite数据中的datetime字段的时候出现 该字符串未被识别为有效的 DateTime
- [sqlserver]在text类型字段中查找字符串出现次数
- 查找字符串中重复出现的数据
- 快速查找字符串中出现的第一个不重复的字母
- 找出重复出现最多的字段,并输出
- 用Java正则去掉字符串中重复出现的字符
- 某个字符串在某个字段出现的次数
- 更新操作如何防止带外键的字段出现重复,代码实现方法
- 字符串中子字符串重复出现的次数
- 去除一个字符串中出现的重复字符,并计算出出现最多次的字符的出现次数
- 如何在字符串里查找第一个不重复的字母,即只出现一次的最靠前的字母