暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

FAQ:如何在 Oracle 中获得和计算工作日,周几信息?

原创 盖国强 2022-09-23
4063

在 Oracle 数据库中,可以通过 to_char 对日期进行转换,获得周信息等,以便进行计算。

获取周几信息

例如 2022年9月23日,是星期五:

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

TO_CHAR(SYSD
------------
FRI

SQL> select sysdate from dual;

SYSDATE
---------
23-SEP-22

判断获取周末

更复杂一点的判断:

SQL> select table_name,last_analyzed,
case when to_char(last_analyzed,'DY') in ('SAT','SUN') then 'Weekend' end tag 
from dba_tables where rownum < 20;

TABLE_NAME		       LAST_ANAL TAG
------------------------------ --------- -------
ICOL$			       20-MAR-18
COL$			       10-SEP-22 Weekend
IND$			       22-SEP-22
TAB$			       23-SEP-22
CLU$			       22-SEP-22
LOB$			       20-MAR-18
COLTYPE$		       20-MAR-18
SUBCOLTYPE$		       20-MAR-18
NTAB$			       20-MAR-18
REFCON$ 		       26-JAN-17
OPQTYPE$		       20-MAR-18

TABLE_NAME		       LAST_ANAL TAG
------------------------------ --------- -------
ICOLDEP$		       20-MAR-18
VIEWTRCOL$		       26-JAN-17
LIBRARY$		       20-MAR-18
ASSEMBLY$		       26-JAN-17
ATTRCOL$		       20-MAR-18
TYPE_MISC$		       20-MAR-18
TS$			       20-MAR-18
FET$			       26-JAN-17

19 rows selected.

获取周一

通过 ISO-Week,截取,可以找到每个日期所属的周一日期:

SQL> select table_name,last_analyzed,trunc(last_analyzed,'IW') "Monday" from dba_tables where rownum <10;

TABLE_NAME		       LAST_ANAL Monday
------------------------------ --------- ---------
ICOL$			       20-MAR-18 19-MAR-18
COL$			       10-SEP-22 05-SEP-22
IND$			       22-SEP-22 19-SEP-22
TAB$			       23-SEP-22 19-SEP-22
CLU$			       22-SEP-22 19-SEP-22
LOB$			       20-MAR-18 19-MAR-18
COLTYPE$		       20-MAR-18 19-MAR-18
SUBCOLTYPE$		       20-MAR-18 19-MAR-18
NTAB$			       20-MAR-18 19-MAR-18

判断日期

判断某个日期是一周中的周几,另外一个算法:

SQL> select table_name,last_analyzed,trunc(last_analyzed,'IW') "Monday",
trunc(last_analyzed)-trunc(last_analyzed,'IW')+1 "Days" 
from dba_tables where rownum <10;

TABLE_NAME		       LAST_ANAL Monday 	 Days
------------------------------ --------- --------- ----------
ICOL$			       20-MAR-18 19-MAR-18	    2
COL$			       10-SEP-22 05-SEP-22	    6
IND$			       22-SEP-22 19-SEP-22	    4
TAB$			       23-SEP-22 19-SEP-22	    5
CLU$			       22-SEP-22 19-SEP-22	    4
LOB$			       20-MAR-18 19-MAR-18	    2
COLTYPE$		       20-MAR-18 19-MAR-18	    2
SUBCOLTYPE$		       20-MAR-18 19-MAR-18	    2
NTAB$			       20-MAR-18 19-MAR-18	    2

9 rows selected.
最后修改时间:2022-09-23 10:27:54
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论