oracle 常用日期计算2007年10月31日 星期三 下午 08:51sysdate 为数据库服务器的当前系统时间。
to_char 是将日期型转为字符型的函数。
to_date 是将字符型转为日期型的函数,一般使用 yyyy-mm-dd hh24:mi:ss格式,当没有指定时间部分时,则默认时间为 00:00:00
dual 表为sys用户的表,这个表仅有一条记录,可以用于计算一些表达式,如果有好事者用 sys 用户登录系统,然后在 dual 表增加了记录的话,那么系统99.999%不能使用了。
为什么使用的时候不用 sys.dual 格式呢,因为 sys 已经为 dual 表建立了所有用户均可使用的别名。
一年的第一天
SELECT to_date(to_char(SYSDATE,'yyyy')||'-01-01','yyyy-mm-dd' ) FROM dual
季度的第一天
SELECT to_date(to_char(SYSDATE,'yyyy-')|| lpad(floor(to_number(to_char(SYSDATE,'mm'))/3)*3+1,2,'0')|| '-01', 'yyyy-mm-dd') FROM dual
floor 为向下取整
lpad 为向左使用指定的字符扩充字符串,这个扩充字符串至2位,不足的补'0'。
当天的半夜
SELECT trunc(SYSDATE)+1-1/24/60/60
FROM dual
trunc 是将 sysdate 的时间部分截掉,即时间部分变成 00:00:00
Oracle中日期加减是按照天数进行的,所以 +1-1/24/60/60 使时间部分变成了 23:59:59。
Oracle 8i 中仅支持时间到秒,9i以上则支持到 1/100000000 秒。
上个月的最后一天
SELECT trunc(last_day(add_months(SYSDATE,-1)))+1-1/24/60/60 FROM dual
add_months 是月份加减函数。
last_day 是求该月份的最后一天的函数。
本年的最后一天
SELECT trunc(last_day(to_date(to_char(SYSDATE,'yyyy')||'-12-01','yyyy-mm-dd')) )+1-1/24/60/60 FROM dual
本月的最后一天
select trunc(last_day(sysdate))+1-1/24/60/60 from dual
本月的第一个星期一
SELECT next_day( to_date(to_char(SYSDATE,'yyyy-mm')||'-01','yyyy-mm-dd'), '星期一' ) FROM dual
next_day 为计算从指定日期开始的第一个符合要求的日期,这里的'星期一'将根据NLS_DATE_LANGUAGE的设置稍有不同。
去掉时分秒
select trunc(sysdate) from dual
显示星期几
SELECT to_char(SYSDATE,'Day') FROM dual
取得某个月的天数
SELECT trunc(last_day(SYSDATE))- to_date(to_char(SYSDATE,'yyyy-mm')||'-01','yyyy-mm-dd')+ 1 FROM dual
判断是否闰年
SELECT decode( to_char(last_day(to_date(to_char(SYSDATE,'yyyy')||'-02-01','yyyy-mm-dd')),'dd'), '28','平年','闰年'
) FROM dual
一个季度多少天
SELECT last_day(to_date(to_char(SYSDATE,'yyyy-')|| lpad(floor(to_number(to_char(SYSDATE,'mm'))/3)*3+3,2,'0')|| '-01','yyyy-mm-dd')) -
to_date(to_char(SYSDATE,'yyyy-')|| lpad(floor(to_number(to_char(SYSDATE,'mm'))/3)*3+1,2,'0')|| '-01','yyyy-mm-dd') +1FROM dual
1、add_months()用于从一个日期值增加或减少一些月份
SQL> select add_months(sysdate,12) "Next Year" from dual;
2、current_date()返回当前会放时区中的当前日期
SQL> select sessiontimezone,current_date from dual;
3、current_timestamp()以timestamp with time zone数据类型返回当前会放时区中的当前日期
4、dbtimezone()返回时区
varchar_value:=dbtimezone
SQL> select dbtimezone from dual;
5、extract()找出日期或间隔值的字段值
SQL> select extract(month from sysdate) "This Month" from dual;
SQL> select extract(year from add_months(sysdate,36)) "3 Years Out" from dual;
SQL>
6、last_day()返回包含了日期参数的月份的最后一天的日期
date_value:=last_day(date_value)
SQL> select last_day(date'2000-02-01') "Leap Yr?" from dual;
SQL> select last_day(sysdate) "Last day of this month" from dual;
SQL>
7、localtimestamp()返回会话中的日期和时间
timestamp_value:=localtimestamp
SQL> select localtimestamp from dual;
SQL> select localtimestamp,current_timestamp from dual;
SQL> select localtimestamp,to_char(sysdate,'DD-MM-YYYY HH:MI:SS AM') "SYSDATE" SQL>
8、months_between()判断两个日期之间的月份数量
number_value:=months_between(date_value,date_value)
SQL> select months_between(sysdate,date'1971-05-18') from dual;
SQL> select months_between(sysdate,date'2001-01-01') from dual;
9、next_day()给定一个日期值,返回由第二个参数指出的日子第一次出现在的日期值(应返回相应日子的名称字符串)
Oracle各种日期计算方法2006-03-13 13:16--首先看一下当前日期
SQL> select sysdate from dual;
SYSDATE
-------------------
2008-03-20 10:01:25
SQL>
--一个月的第一天
SELECT TO_DATE (TO_CHAR (SYSDATE, 'yyyy-mm') || '-01', 'yyyy-mm-dd')
FROM DUAL;
TO_DATE(TO_CHAR(SYS
-------------------
2008-03-01 00:00:00
/*
sysdate 为数据库服务器的当前系统时间。
to_char 是将日期型转为字符型的函数。
to_date 是将字符型转为日期型的函数,一般使用 yyyy-mm-dd hh24:mi:ss格式,当没有指定时间部分时,则默认时间为 00:00:00
dual 表为sys用户的表,这个表仅有一条记录,可以用于计算一些表达式,如果有好事者用 sys 用户登录系统,然后在 dual 表增加了记录的话,那么系统99.999%不能使用了。
为什么使用的时候不用 sys.dual 格式呢,因为 sys 已经为 dual 表建立了所有用户均可使用的别名。
*/
--一年的第一天
SELECT TO_DATE (TO_CHAR (SYSDATE, 'yyyy') || '-01-01', 'yyyy-mm-dd')
FROM DUAL;
TO_DATE(TO_CHAR(SYS
-------------------
2008-01-01 00:00:00
--季度的第一天
SELECT TO_DATE ( TO_CHAR (SYSDATE, 'yyyy-')
|| LPAD (FLOOR (TO_NUMBER (TO_CHAR (SYSDATE, 'mm')) / 3) * 3 + 1, 2, '0')
|| '-01',
'yyyy-mm-dd'
)
FROM DUAL;
TO_DATE(TO_CHAR(SYS
-------------------
2008-04-01 00:00:00
/*
floor 为向下取整
lpad 为向左使用指定的字符扩充字符串,这个扩充字符串至2位,不足的补'0'。
*/
--当天的半夜
SELECT TRUNC (SYSDATE) + 1 - 1 / 24 / 60 / 60
FROM DUAL;
TRUNC(SYSDATE)+1-1/
-------------------
2008-03-20 23:59:59
/*
trunc 是将 sysdate 的时间部分截掉,即时间部分变成 00:00:00
Oracle中日期加减是按照天数进行的,所以 +1-1/24/60/60 使时间部分变成了 23:59:59。
Oracle 8i 中仅支持时间到秒,9i以上则支持到 1/100000000 秒。
*/
--上个月的最后一天
SELECT TRUNC (LAST_DAY (ADD_MONTHS (SYSDATE, -1))) + 1 - 1 / 24 / 60 / 60
FROM DUAL;
TRUNC(LAST_DAY(ADD_
-------------------
2008-02-29 23:59:59
/*
add_months 是月份加减函数。
last_day 是求该月份的最后一天的函数。
*/
--本年的最后一天
SELECT TRUNC (LAST_DAY (TO_DATE (TO_CHAR (SYSDATE, 'yyyy') || '-12-01', 'yyyy-mm-dd')))
+ 1
- 1 / 24 / 60 / 60
FROM DUAL;
TRUNC(LAST_DAY(TO_D
-------------------
2008-12-31 23:59:59
--本月的最后一天
SELECT TRUNC (LAST_DAY (SYSDATE)) + 1 - 1 / 24 / 60 / 60
FROM DUAL;
TRUNC(LAST_DAY(SYSD
-------------------
2008-03-31 23:59:59
--本月的第一个星期一
SELECT NEXT_DAY (TO_DATE (TO_CHAR (SYSDATE, 'yyyy-mm') || '-01', 'yyyy-mm-dd'), '星期一')
FROM DUAL;
NEXT_DAY(TO_DATE(TO
-------------------
2008-03-02 00:00:00
/*
next_day 为计算从指定日期开始的第一个符合要求的日期,这里的'星期一'将根据NLS_DATE_LANGUAGE的设置稍有不同。
*/
--去掉时分秒
SELECT TRUNC (SYSDATE)
FROM DUAL;
TRUNC(SYSDATE)
-------------------
2008-03-20 00:00:00
--显示星期几
SELECT TO_CHAR (SYSDATE, 'Day')
FROM DUAL;
TO_CHAR(S
---------
Thursday
--取得某个月的天数
SELECT TRUNC (LAST_DAY (SYSDATE)) - TO_DATE (TO_CHAR (SYSDATE, 'yyyy-mm') || '-01', 'yyyy-mm-dd') + 1
FROM DUAL;
TRUNC(LAST_DAY(SYSDATE))-TO_DATE(TO_CHAR(SYSDATE,'YYYY-MM')||'-01','YYYY-MM-DD')+1
----------------------------------------------------------------------------------
31
--判断是否闰年
SELECT DECODE (TO_CHAR (LAST_DAY (TO_DATE (TO_CHAR (SYSDATE, 'yyyy') || '-02-01', 'yyyy-mm-dd')), 'dd'),
'28', '平年',
'闰年'
)
FROM DUAL;
--一个季度多少天
SELECT LAST_DAY (TO_DATE ( TO_CHAR (SYSDATE, 'yyyy-')
|| LPAD (FLOOR (TO_NUMBER (TO_CHAR (SYSDATE, 'mm')) / 3) * 3 + 3, 2, '0')
|| '-01',
'yyyy-mm-dd'
)
)
- TO_DATE ( TO_CHAR (SYSDATE, 'yyyy-')
|| LPAD (FLOOR (TO_NUMBER (TO_CHAR (SYSDATE, 'mm')) / 3) * 3 + 1, 2, '0')
|| '-01',
'yyyy-mm-dd'
)
+ 1 col
FROM DUAL;
COL
----------
91
--End--
oracle 日期函数计算
Oracle关于时间/日期的操作
1.日期时间间隔操作
当前时间减去7分钟的时间
select sysdate,sysdate - interval '7' MINUTE from dual
当前时间减去7小时的时间
select sysdate - interval '7' hour from dual
当前时间减去7天的时间
select sysdate - interval '7' day from dual
当前时间减去7月的时间
select sysdate,sysdate - interval '7' month from dual
当前时间减去7年的时间
select sysdate,sysdate - interval '7' year from dual
时间间隔乘以一个数字
select sysdate,sysdate - 8 *interval '2' hour from dual
2.日期到字符操作
select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual
select sysdate,to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual
select sysdate,to_char(sysdate,'yyyy-ddd hh:mi:ss') from dual
select sysdate,to_char(sysdate,'yyyy-mm iw-d hh:mi:ss') from dual
参考oracle的相关关文档(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)
3. 字符到日期操作
select to_date('2003-10-17 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual
具体用法和上面的to_char差不多。
4. trunk/ ROUND函数的使用
select trunc(sysdate ,'YEAR') from dual
select trunc(sysdate ) from dual
select to_char(trunc(sysdate ,'YYYY'),'YYYY') from dual
5.oracle有毫秒级的数据类型
--返回当前时间 年月日小时分秒毫秒
select to_char(current_timestamp(5),'DD-MON-YYYY HH24:MI:SSxFF') from dual;
--返回当前 时间的秒毫秒,可以指定秒后面的精度(最大=9)
select to_char(current_timestamp(9),'MI:SSxFF') from dual;
6.计算程序运行的时间(ms)
declare
type rc is ref cursor;
l_rc rc;
l_dummy all_objects.object_name%type;
l_start number default dbms_utility.get_time;
begin
for I in 1 .. 1000
loop
open l_rc for
'select object_name from all_objects '||
'where object_id = ' || i;
fetch l_rc into l_dummy;
close l_rc;
end loop;
dbms_output.put_line
( round( (dbms_utility.get_time-l_start)/100, 2 ) ||
' seconds...' );
end;
在Oracle中,要获得日期中的年份,例如把sysdate中的年份取出来,并不是一件难事。常用的方法是:Select to_number(to_char(sysdate,''yyyy'')) from dual,而实际上,
oracle本身有更好的方法,那就是使用Extract函数,使用方法是:Select Extract(year from sysdate) from dual,这种方法省掉了类型转换,看上去更加简洁。相应的,要取
得月份或日,可以用select extract (month from sysdate) from dual和select extract (day from sysdate) from dual。
分享到:
相关推荐
给出日期date和星期x之后计算下一个星期的日期 SQL> select next_day('18-5月-2001','星期五') next_day from dual; NEXT_DAY ---------- 25-5月 -01 41.SYSDATE 用来得到系统的当前日期 SQL> select to_...
oracle时间函数处理总结大全。个人总结的oracle SQL里常用的时间函数,常用日期型函数 贡献给大家分享。。值得大家作为工具
3.6 Oracle常用函数 3.6.1 字符类函数 3.6.2 数字类函数 3.6.3 日期类函数 3.6.4 转换类函数 3.6.5 聚集类函数 第4章 Oracle PL/SQL语言及编程 4.1 PL/SQL简介 4.1.1 PL/SQL的基本结构 4.1.2 ...
1、得到数据库名和创建日期SELECT name, created, log_mode, open_mode FROM v$database; 2、ORACLE数据库的计算机的主机名,ORACLE数据库的实例名及ORACLE数据库管理系统的版本信息SELECT host_name, instance_name...
3.6 Oracle常用函数 3.6.1 字符类函数 3.6.2 数字类函数 3.6.3 日期类函数 3.6.4 转换类函数 3.6.5 聚集类函数 第4章 Oracle PL/SQL语言及编程 4.1 PL/SQL简介 4.1.1 PL/SQL的基本结构 4.1.2 PUSQL注释 ...
学习oracle,首先我们必须要掌握常用的基本命令,oracle中的命令比较多,常用的命令如下: 1. 登录命令(sqlplus) 说明:用于登录到oracle数据库 用法:sqlplus 用户名/密码 [as sysdba/sysoper] 注意:当用特权用户...
出版日期:2011 年11月 开本:16开 页码:502 版次:1-1 主编推荐 资深Oracle专家力作,OakTable团队推荐 全面、独到、翔实,题材丰富 Oracle开发人员和DBA必备 内容简介 Oracle 数据库中的SQL是当今市场...
同组者姓名 实验日期 一、实验目的: 1. 了解触发器的类型。 2. 掌握PL/SQL触发器的使用方法。 二、实验要求: 1. 掌握SQL Developer编译功能,使用SQL Developer完成PL/SQL命令。 2. 按照业务要求创建实现...
4.2.2 语言字符集、常用符号 4.2.3 常量与变量 4.2.4 数据类型 4.2.5 集合API方法 4.3 流程控制 4.3.1条件控制 4.3.2 循环控制 4.3.3 顺序控制 4.4 游标 4.4.1显式游标 4.4.2 隐式...
3.6 Oracle常用函数 3.6.1 字符类函数 3.6.2 数字类函数 3.6.3 日期类函数 3.6.4 转换类函数 3.6.5 聚集类函数 第4章 Oracle PL/SQL语言及编程 4.1 PL/SQL简介 4.1.1 PL/SQL的基本结构 4.1.2 PUSQL注释 4.1.3 PL/...
3.6 Oracle常用函数 3.6.1 字符类函数 3.6.2 数字类函数 3.6.3 日期类函数 3.6.4 转换类函数 3.6.5 聚集类函数 第4章 Oracle PL/SQL语言及编程 4.1 PL/SQL简介 4.1.1 PL/SQL的基本结构 4.1.2 PUSQL注释 4.1.3 PL/...
第一部分 Oracle SQL*PLUS基础 23 第一章 Oracle数据库基础 23 §1.1 理解关系数据库系统(RDBMS) 23 §1.1.1 关系模型 23 §1.1.2 Codd十二法则 24 §1.2 关系数据库系统(RDBMS)的组成 24 §1.2.1 RDBMS 内核 24...
第一部分 Oracle SQL*PLUS基础 23 第一章 Oracle数据库基础 23 §1.1 理解关系数据库系统(RDBMS) 23 §1.1.1 关系模型 23 §1.1.2 Codd十二法则 24 §1.2 关系数据库系统(RDBMS)的组成 24 §1.2.1 RDBMS 内核 24...
就是chm的手册,人大金仓的。手册我经常用,相比比较成熟的oracle、mysql手册差点意思,常用方法可参考,自定义函数什么的,请参考postgresql
Territory:指定货币和数字的格式,地区和计算星期及日期的习惯。 Characterset:控制客户端应用程序使用的字符集。通常设置或等于客户端的代码页。或者对于unicode应用设为UTF8。 在windows中,查询和修改NLS_LANG...
11.7.4 计算销售单制单日期所在月份的第一天和最后一天 11.8 结果集转置 11.8.1 将结果集转置为一行 11.8.2 把结果集转置为多行 11.9 递归查询 11.9.1 Oracle中的CONNECT BY子句 11.9.2 Oracle中的SYS...
11.7.4 计算销售单制单日期所在月份的第一天和最后一天 11.8 结果集转置 11.8.1 将结果集转置为一行 11.8.2 把结果集转置为多行 11.9 递归查询 11.9.1 Oracle中的CONNECT BY子句 11.9.2 Oracle中的SYS...
11.7.4 计算销售单制单日期所在月份的第一天和最后一天 11.8 结果集转置 11.8.1 将结果集转置为一行 11.8.2 把结果集转置为多行 11.9 递归查询 11.9.1 Oracle中的CONNECT BY子句 11.9.2 Oracle中的SYS...
11.7.4 计算销售单制单日期所在月份的第一天和最后一天 11.8 结果集转置 11.8.1 将结果集转置为一行 11.8.2 把结果集转置为多行 11.9 递归查询 11.9.1 Oracle中的CONNECT BY子句 11.9.2 Oracle中的SYS...