免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1829 | 回复: 4
打印 上一主题 下一主题

请教:符合这种要求的sql语句应该怎么写? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-30 23:06 |只看该作者 |倒序浏览
表table中有一列数据:
id
------
001
001001
001002
002
003
003001
003001002
003011012
.
.
.
此列数据的长度不定,但都是3的倍数,可以理解为每3个数是一个单位,现在要把每个单位的第1个数去掉不要(数据长度是2的倍数),得到如下:
id
------
01
0101
0102
02
03
0301
030101
031112
.
.
.
请问sql语句应该怎么实现?谢谢!

论坛徽章:
0
2 [报告]
发表于 2006-12-31 05:13 |只看该作者
in oracle 10g

SELECT REGEXP_REPLACE('123456789', '([[:digit:]])([[:digit:]]{2})', '\2\3') from dual;

REGEXP
------
235689

论坛徽章:
0
3 [报告]
发表于 2006-12-31 09:20 |只看该作者
这是在oracle9i中的,应该怎么写啊?
火子花 该用户已被删除
4 [报告]
发表于 2006-12-31 11:19 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2007-01-02 23:14 |只看该作者

试试这个方法

试试这个方法,不过需要创建一个函数来帮助一下
SQL> col f1 format A20
SQL> desc joe_t1
名称                                                  是否为空? 类型
----------------------------------------------------- -------- -----------------------
F1                                                             VARCHAR2(200)

SQL> SELECT *
  2    FROM joe_t1;

F1
--------------------
001
001001
001002
002
002003
001002003
001002002

已选择7行。

SQL> UPDATE joe_t1
  2    SET f1 = fn_test1(f1)
  3  /

已更新7行。

SQL> SELECT *
  2    FROM joe_t1;

F1
--------------------
01
0101
0102
02
0203
010203
010202

已选择7行。

SQL>


下面是用到的函数代码

  1. CREATE OR REPLACE FUNCTION fn_test1(v_p1 STRING) RETURN STRING IS
  2.   v_str VARCHAR2(200) ;
  3. BEGIN
  4.   IF length(v_p1) = 3 THEN
  5.     v_str := substr(v_p1, 2);
  6.   ELSE
  7.     v_str := substr(v_p1, 2, 2) || fn_test1(substr(v_p1, 4));
  8.   END IF;
  9.   RETURN v_str;
  10. END;
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP