oracle 获取日期

oracle 获取日期,第1张

oracle中最简单获取日期的方式是通过查询sysdate来获取。

语句如下:

select sysdate from dual;

结果:

如果只获取日期部分:

select to_char(sysdate,'yyyy-mm-dd') from dual;

结果:

select

from (select to_date('2013-01-01', 'yyyy-mm-dd') + rownum - 1 days

from dba_objects) a

where extract(year from days) = 2013

and to_char(days, 'WW') = 22

and to_char(days, 'day') in ('星期一', '星期二', '星期三', '星期四', '星期五')

年份:2013,第几周:22

通过 对日期, 进行 TRUNC 的 *** 作, 按 'W' 进行 截取。

也就是 取得 本周第一天的 *** 作。

下面是 取 年/季度/月/周/日期/小时 截取的例子。

SQL 执行的时间是 2010-10-17 22点多

SQL> SELECT 'Year' AS truncType , TRUNC( SYSDATE, 'YYYY' ) FROM DUAL

2 UNION ALL

3 SELECT 'Quarter' AS truncType, TRUNC( SYSDATE, 'Q' ) FROM DUAL

4 UNION ALL

5 SELECT 'Month' AS truncType, TRUNC( SYSDATE, 'MM' ) FROM DUAL

6 UNION ALL

7 SELECT 'Week' AS truncType, TRUNC( SYSDATE, 'W' ) FROM DUAL

8 UNION ALL

9 SELECT 'Day' AS truncType, TRUNC( SYSDATE, 'D' ) FROM DUAL

10 UNION ALL

11 SELECT 'Hour' AS truncType, TRUNC( SYSDATE, 'HH' ) FROM DUAL;

TRUNCTYPE TRUNC(SYSDATE,'YYYY

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

Year 2010-01-01 00:00:00

Quarter 2010-10-01 00:00:00

Month 2010-10-01 00:00:00

Week 2010-10-15 00:00:00

Day 2010-10-17 00:00:00

Hour 2010-10-17 22:00:00

6 rows selected

有了 开始日期, 结束日期, 就是 开始 日期 + 6 就可以了。

--1、取某天在本周中的第几天(默认周日开始算第1天)

select to_char(to_date('2011-04-11','yyyy-mm-dd'), 'd') from dual;

--2、如果要从周一开始算第1天,需要做一些手脚

--大概思路是:1变成7,2变成1,3变成2,7变成6

select decode(to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd'),

1,

7,

to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd') - 1)

from dual;

--3、再根据上面的结论倒推到上周时间

select to_date('2011-04-04', 'yyyy-mm-dd') -

decode(to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd'),

1,

7,

to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd') - 1) - 7 + 1,

to_date('2011-04-04', 'yyyy-mm-dd') -

decode(to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd'),

1,

7,

to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd') - 1) - 7 + 1 + 6

from dual;

截取本周第一天:

SQL> select sysdate,trunc(sysdate,'d') from dual;

SYSDATE TRUNC(SYSDATE,'D')

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

2009-03-24 21:29:32 2009-03-22 00:00:00

select sysdate 当时日期,

next_day(sysdate,'星期一') 下周星期一,

next_day(sysdate,'星期二') 下周星期二,

next_day(sysdate,'星期三') 下周星期三,

next_day(sysdate,'星期四') 下周星期四,

next_day(sysdate,'星期五') 下周星期五,

next_day(sysdate,'星期六') 下周星期六,

next_day(sysdate,'星期日') 下周星期日 from dual;

select sysdate 当时日期,

trunc(sysdate) 今天日期,

trunc(sysdate,'day') 本周星期日,

trunc(sysdate,'month') 本月初,

trunc(sysdate,'q') 本季初日期,

trunc(sysdate,'year') 本年初日期 from dual;

看看有你要的结果没。

select case

when mod(1 + 7 - to_char(trunc(sysdate, 'MM'), 'D'), 7) +

trunc(sysdate, 'MM') + 28 - last_day(sysdate) > 0 then

0

else

1

end + 4

from dual

把其中sysdate替换为你的日期即可

如果想知道一个月有几个星期一,把mod括号中第一个1改为2即可,其他日期类推

以上就是关于oracle 获取日期全部的内容,包括:oracle 获取日期、oracle 获取指定周的星期一到星期五日期、ORACLE中怎么判断某一周的开始和结束日期(要具体用法)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9291070.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存