oracle查询截取字段

rainer27613 2008-11-10 02:45:15
比如说a表中的a1字段,数据是2009:2008:2007,
我想查询到2008和2007,应该怎么查呢?
...全文
394 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chencan0603 2008-11-11
  • 打赏
  • 举报
回复
select substr('2009:2008:2007',6,4),substr('2009:2008:2007',11,4) from dual;
chentony 2008-11-11
  • 打赏
  • 举报
回复
如果是有限次數的話,可以用substr instr來完成 
instr從未端查起
you_tube 2008-11-10
  • 打赏
  • 举报
回复

SQL> SELECT LPAD(SUBSTR('&&IP',1,INSTR('&&IP','.',1)-1),3,'0') || '.'
2 || LPAD(SUBSTR('&&IP',INSTR('&&IP','.',1,1)+1,INSTR('&&IP','.',1,2)-INSTR('&&IP','.',1,1)-1),3,'0') || '.'
3 || LPAD(SUBSTR('&&IP',INSTR('&&IP','.',1,2)+1,INSTR('&&IP','.',1,3)-INSTR('&&IP','.',1,2)-1),3,'0') || '.'
4 || LPAD(SUBSTR('&&IP',INSTR('&&IP','.',1,3)+1),3,'0')
5 AS IP
6 FROM DUAL;
mantisXF 2008-11-10
  • 打赏
  • 举报
回复
FYI: 问题14: http://topic.csdn.net/u/20081002/00/f8d90ba2-e2bb-412a-a0c5-1b6d518fc22a.html[Quote=引用楼主 rainer27613 的帖子:]
比如说a表中的a1字段,数据是2009:2008:2007,
我想查询到2008和2007,应该怎么查呢?
[/Quote]
tringgg 2008-11-10
  • 打赏
  • 举报
回复
你只要从第一个冒号后面开始取即可?这个就简单了 :
select substr(your_col,instr(your_col,':')+1) from your_tab


[Quote=引用 4 楼 rainer27613 的回复:]
不好意思,忘了说明,冒号左右的字符串长度是不固定的,也可能是20092008:20092831203:2103912831203
有没有那种像java中的split方法,如果用substr能取到':'位置的这种索引方法也行。
引用 2 楼 BlueskyWide 的回复:


SQL codeselect substr('2009:2008:2007',6,4),substr('2009:2008:2007',11,4) from dual;


引用楼主 rainer27613 的帖子:
比如说a表中的a1字段,数据是2009:2008:2007,
我想查询到…
[/Quote]
boydgmx 2008-11-10
  • 打赏
  • 举报
回复
instr,substr 配合使用即可

给你一个规范化IP地址的例子:


SQL> SELECT LPAD(SUBSTR('&&IP',1,INSTR('&&IP','.',1)-1),3,'0') || '.'
2 || LPAD(SUBSTR('&&IP',INSTR('&&IP','.',1,1)+1,INSTR('&&IP','.',1,2)-INSTR('&&IP','.',1,1)-1),3,'0') || '.'
3 || LPAD(SUBSTR('&&IP',INSTR('&&IP','.',1,2)+1,INSTR('&&IP','.',1,3)-INSTR('&&IP','.',1,2)-1),3,'0') || '.'
4 || LPAD(SUBSTR('&&IP',INSTR('&&IP','.',1,3)+1),3,'0')
5 AS IP
6 FROM DUAL;
输入 ip 的值: 202.1.0.35

IP
---------------
202.001.000.035
codearts 2008-11-10
  • 打赏
  • 举报
回复
10g以上的话,用正则很好和处理

SELECT regexp_replace('20092008:20092831203:2103912831203', '(\d+):(\d+):(\d+)', '\2 \3')
FROM dual;
rainer27613 2008-11-10
  • 打赏
  • 举报
回复
不好意思,忘了说明,冒号左右的字符串长度是不固定的,也可能是20092008:20092831203:2103912831203
有没有那种像java中的split方法,如果用substr能取到':'位置的这种索引方法也行。
[Quote=引用 2 楼 BlueskyWide 的回复:]


SQL codeselect substr('2009:2008:2007',6,4),substr('2009:2008:2007',11,4) from dual;




引用楼主 rainer27613 的帖子:
比如说a表中的a1字段,数据是2009:2008:2007,
我想查询到2008和2007,应该怎么查呢?
[/Quote]
rainer27613 2008-11-10
  • 打赏
  • 举报
回复
要在报表里这么弄,没办法,只能用sql实现
[Quote=引用 1 楼 lclg_silver 的回复:]
为什么不把a1字段全部查出来,然后在程序里做处理呢?
[/Quote]
BlueskyWide 2008-11-10
  • 打赏
  • 举报
回复

select substr('2009:2008:2007',6,4),substr('2009:2008:2007',11,4) from dual;



[Quote=引用楼主 rainer27613 的帖子:]
比如说a表中的a1字段,数据是2009:2008:2007,
我想查询到2008和2007,应该怎么查呢?
[/Quote]
无尽飞羽 2008-11-10
  • 打赏
  • 举报
回复
为什么不把a1字段全部查出来,然后在程序里做处理呢?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧