利用伪列算出每个月那几天是星期天(ORACLE)

1.首先我们要用到LEVEL .... CONNECT BY

level是一个伪列,类似于rownum,而后面加connect by则可以构造出一个循环来;

例如:

SQL>select level from dual connect by level

结果

-----------------------------------------------

LEVEL

1

2

3

4

5

一个伪列并循环显示就这样产生了.

2.接着我要构造出一个日期的伪列出来,需要用到日期函数,比如现在是12月,我需要构造出来2007年12月1日----2007年12月31日的伪列.

SQL>select last_day(sysdate) from dual;

结果

-----------------------------------------------

1       2007-12-31 1:22:24

SQL>select to_char(last_day(sysdate),'DD') from dual;

结果

-----------------------------------------------

1       31

SQL>select level from dual connect by level

结果

-----------------------------------------------

1 1

2 2

3 3

4 4

5 5

6 6

7 7

8 8

9 9

10 10

11 11

12 12

13 13

14 14

15 15

16 16

17 17

18 18

19 19

20 20

21 21

22 22

23 23

24 24

25 25

26 26

27 27

28 28

29 29

30 30

31 31

SQL>select TRUNC(SYSDATE,'MM') from dual;

结果

-----------------------------------------------

1       2007-12-1

接着我们要做的事情就是把上面的函数结合起来实现2007年12月1日----2007年12月31日的伪列

SQL>select TRUNC(SYSDATE,'MM')-1+level from dual connect by level

结果

-----------------------------------------------

1 2007-12-1

2 2007-12-2

3 2007-12-3

4 2007-12-4

5 2007-12-5

6 2007-12-6

7 2007-12-7

8 2007-12-8

9 2007-12-9

10 2007-12-10

11 2007-12-11

12 2007-12-12

13 2007-12-13

14 2007-12-14

15 2007-12-15

16 2007-12-16

17 2007-12-17

18 2007-12-18

19 2007-12-19

20 2007-12-20

21 2007-12-21

22 2007-12-22

23 2007-12-23

24 2007-12-24

25 2007-12-25

26 2007-12-26

27 2007-12-27

28 2007-12-28

29 2007-12-29

30 2007-12-30

31 2007-12-31

3.构造出日期伪列后,我们只需要加上一个where条件既可以查询出这个月的星期日都是几号了

SQL>select to_char(sysdate,'DAY') from dual;

结果

-----------------------------------------------

1 星期六

SQL>select TRUNC(SYSDATE,'MM')-1+level from dual

SQL>where to_char(TRUNC(SYSDATE,'MM')-1+level,'DAY') = '星期日'

SQL>connect by level

结果

-----------------------------------------------

1 2007-12-2

2 2007-12-9

3 2007-12-16

4 2007-12-23

5 2007-12-30

也可以把sql语句换成

SQL>select TRUNC(SYSDATE,'MM')-1+level from dual

SQL>where to_char(TRUNC(SYSDATE,'MM')-1+level,'D') = 1

SQL>connect by level

1.首先我们要用到LEVEL .... CONNECT BY

level是一个伪列,类似于rownum,而后面加connect by则可以构造出一个循环来;

例如:

SQL>select level from dual connect by level

结果

-----------------------------------------------

LEVEL

1

2

3

4

5

一个伪列并循环显示就这样产生了.

2.接着我要构造出一个日期的伪列出来,需要用到日期函数,比如现在是12月,我需要构造出来2007年12月1日----2007年12月31日的伪列.

SQL>select last_day(sysdate) from dual;

结果

-----------------------------------------------

1       2007-12-31 1:22:24

SQL>select to_char(last_day(sysdate),'DD') from dual;

结果

-----------------------------------------------

1       31

SQL>select level from dual connect by level

结果

-----------------------------------------------

1 1

2 2

3 3

4 4

5 5

6 6

7 7

8 8

9 9

10 10

11 11

12 12

13 13

14 14

15 15

16 16

17 17

18 18

19 19

20 20

21 21

22 22

23 23

24 24

25 25

26 26

27 27

28 28

29 29

30 30

31 31

SQL>select TRUNC(SYSDATE,'MM') from dual;

结果

-----------------------------------------------

1       2007-12-1

接着我们要做的事情就是把上面的函数结合起来实现2007年12月1日----2007年12月31日的伪列

SQL>select TRUNC(SYSDATE,'MM')-1+level from dual connect by level

结果

-----------------------------------------------

1 2007-12-1

2 2007-12-2

3 2007-12-3

4 2007-12-4

5 2007-12-5

6 2007-12-6

7 2007-12-7

8 2007-12-8

9 2007-12-9

10 2007-12-10

11 2007-12-11

12 2007-12-12

13 2007-12-13

14 2007-12-14

15 2007-12-15

16 2007-12-16

17 2007-12-17

18 2007-12-18

19 2007-12-19

20 2007-12-20

21 2007-12-21

22 2007-12-22

23 2007-12-23

24 2007-12-24

25 2007-12-25

26 2007-12-26

27 2007-12-27

28 2007-12-28

29 2007-12-29

30 2007-12-30

31 2007-12-31

3.构造出日期伪列后,我们只需要加上一个where条件既可以查询出这个月的星期日都是几号了

SQL>select to_char(sysdate,'DAY') from dual;

结果

-----------------------------------------------

1 星期六

SQL>select TRUNC(SYSDATE,'MM')-1+level from dual

SQL>where to_char(TRUNC(SYSDATE,'MM')-1+level,'DAY') = '星期日'

SQL>connect by level

结果

-----------------------------------------------

1 2007-12-2

2 2007-12-9

3 2007-12-16

4 2007-12-23

5 2007-12-30

也可以把sql语句换成

SQL>select TRUNC(SYSDATE,'MM')-1+level from dual

SQL>where to_char(TRUNC(SYSDATE,'MM')-1+level,'D') = 1

SQL>connect by level

结果

-----------------------------------------------

1 2007-12-2

2 2007-12-9

3 2007-12-16

4 2007-12-23

5 2007-12-30

数字1-7分别代表星期天到星期六;

OK到此分析完毕,Oracle的伪列的功能还是很不错的呀!~呵呵

结果

-----------------------------------------------

1 2007-12-2

2 2007-12-9

3 2007-12-16

4 2007-12-23

5 2007-12-30

数字1-7分别代表星期天到星期六;

OK到此分析完毕,Oracle的伪列的功能还是很不错的呀!~呵呵


相关文章

  • Oracle时间格式
  • 1:取得当前日期是本月的第几周 SQL> select to_char(sysdate,'YYYYMMDD W HH24:MI:SS') from dual; TO_CHAR(SYSDATE,'YY ------------------- 20030327 4 18:16:09 SQL> ...

  • oracle及Java日期格式
  • oracle及Java日期格式 如果想转化为2005-07-05 的格式,则需要使用类 SimpleDateFormat SimpleDateFormat formatt= new SimpleDateFormat("yyyy-MM-dd") ; Date date =new D ...

  • DBA职业生涯规划指南
  • DBA 职业生涯规划指南 DBA 职业生涯规划指南 DBA是Database Administrator的简称,即我们常说的数据库管理员.在数据信息呈爆炸式增长的今天,DBA的角色已经发生了重大的转变.各种维护计划.数据备份以及安全存储等工作都已经成为了DBA们的家常便饭,可以说一名DBA应该是IT ...

  • 物流经典案例
  • 上海工程技术大学<物流信息技术>精品课程案例选集 Case03 Oracle 集群数据库在铁道部应用案例 铁道部利用Oracle9i 集群数据库系统(Oracle9i RAC ),顺利开展铁道部运输管理信息系统(TMIS )的"三级建库"工程--在各铁路局和铁路分局利 ...

  • Oracle运行机制
  • *************************************************************** Oracle运行机制 *************************************************************** 我们从一个用户请求开始 ...

  • 郑州铁路职业技术学院12年orcl期末考试题库
  • Oracle 10g . . 在登录Oracle Enterprise Manager Database Control时,连接身份有3种选择,分别是 Oracle . . column 在SQL* Plus 工具中,可以使用 并 且还可以在命令行中传递脚步希望使用的任何参数. 控制结构分为3. O ...

  • Oracle各版本发行时间和特性
  • 1983年,OracleV3数据库发布,成为当时业界第一款可同时支持PC.小型机和主机的数据库 1991年8月,Oracle在北京成立了一家独资公司,它的中文名字叫"北京甲骨文软件系统有限公司",也就是今天人们称谓的Oracle中国公司. ORACLE7.0新特性 数据库的完整性 ...

  • 安装部署手册
  • 第一部分 数据库服务器的安装 . .................................................................................................... 2 1 介绍 ......................... ...

  • 计算机网格
  • 走近网格 据Gartner 市场调查公司的一位分析员罗布·巴切尔德说:各种数据表明网格技术在商业和研究领域有巨大发展潜力,特别值得关注的是这个新型产业正在以每年50%的速度惊人地增长着. 尽管网格一词对大多数计算机用户来说还很陌生,但是翻开资料就会发现,国外的网格计算研究从20世纪90年代初就已经开 ...

© 2024 范文中心 | 联系我们 webmaster# onjobs.com.cn