知识大全 oracle时间用法
Posted 时间
篇首语:知识是产生对人类自由的热爱和原则的唯一源泉。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 oracle时间用法相关的知识,希望对你有一定的参考价值。
oracle中 小时的表示方法 贴出来与大家共享!
小时表示方法 to_date( : : yyyy mm dd hh :mi:ss )
小时表示方法 to_date( : : yyyy mm dd hh:mi:ss )
select usernumber from usertailor where createtime>to_date( : : yyyy mm dd hh :mi:ss );
常用日期型函数
Sysdate 当前日期和时间
SQL> Select sysdate from dual;
SYSDATE
月
Last_day 本月最后一天
SQL> Select last_day(sysdate) from dual;
LAST_DAY(S
月
Add_months(d n) 当前日期d后推n个月
用于从一个日期值增加或减少一些月份
date_value:=add_months(date_value number_of_months)
SQL> Select add_months(sysdate ) from dual;
ADD_MONTHS
月
Months_beeen(f s) 日期f和s间相差月数
SQL> select months_beeen(sysdate to_date( yyyy mm dd ))from dual;
MONTHS_BEEEN(SYSDATE TO_DATE( YYYY MM DD ))
NEXT_DAY(d day_of_week)
返回由 day_of_week 命名的 在变量 d 指定的日期之后的第一个工作日的日期 参数 day_of_week 必须为该星期中的某一天
SQL> SELECT next_day(to_date( YYYYMMDD ) ) FROM dual;
NEXT_DAY(T
月
current_date()返回当前会话时区中的当前日期
date_value:=current_date
SQL> column sessiontimezone for a
SQL> select sessiontimezone current_date from dual;
SESSIONTIMEZONE CURRENT_DA
+ : 月
SQL> alter session set time_zone= : /
会话已更改
SQL> select sessiontimezone current_timestamp from dual;
SESSIONTIMEZONE CURRENT_TIMESTAMP
: 月 下午 :
current_timestamp()以timestamp with time zone数据类型返回当前会话时区中的当前日期
SQL> select current_timestamp from dual;
CURRENT_TIMESTAMP
月 上午 + :
dbtimezone()返回时区
SQL> select dbtimezone from dual;
DBTIME
:
extract()找出日期或间隔值的字段值
date_value:=extract(date_field from [datetime_value|interval_value])
SQL> select extract(month from sysdate) This Month from dual;
This Month
SQL> select extract(year from add_months(sysdate )) Years from dual;
Years
localtimestamp()返回会话中的日期和时间
SQL> select localtimestamp from dual;
LOCALTIMESTAMP
月 上午
常用日期数据格式(该段为摘抄)
Y或YY或YYY 年的最后一位 两位或三位 Select to_char(sysdate YYY ) from dual 表示 年
SYEAR或YEAR SYEAR使公元前的年份前加一负号 Select to_char(sysdate SYEAR ) from dual 表示公元前 年
Q 季度 ~ 月为第一季度 Select to_char(sysdate Q ) from dual 表示第二季度①
MM 月份数 Select to_char(sysdate MM ) from dual 表示 月
RM 月份的罗马表示 Select to_char(sysdate RM ) from dual IV表示 月
Month 用 个字符长度表示的月份名 Select to_char(sysdate Month ) from dual May后跟 个空格表示 月
WW 当年第几周 Select to_char(sysdate WW ) from dual 表示 年 月 日为第 周
W 本月第几周 Select to_char(sysdate W ) from dual 年 月 日为第 周
DDD 当年第几 月 日为 月 日为 Select to_char(sysdate DDD ) from dual 年 月 日为第 天
DD 当月第几天 Select to_char(sysdate DD ) from dual 月 日为第 天
D 周内第几天 Select to_char(sysdate D ) from dual 年 月 日为星期一
DY 周内第几天缩写 Select to_char(sysdate DY ) from dual SUN 年 月 日为星期天
HH或HH 进制小时数 Select to_char(sysdate HH ) from dual 午夜 点过 分为
HH 小时制 Select to_char(sysdate HH ) from dual 下午 点 分为
MI 分钟数( ~ ) Select to_char(sysdate MI ) from dual 下午 点 分
SS 秒数( ~ ) Select to_char(sysdate SS ) from dual 点 分 秒
提示注意不要将MM格式用于分钟(分钟应该使用MI) MM是用于月份的格式 将它用于分钟也能工作 但结果是错误的
现在给出一些实践后的用法
上月末天
SQL> select to_char(add_months(last_day(sysdate) ) yyyy MM dd ) LastDay from
dual;
LASTDAY
上月今天
SQL> select to_char(add_months(sysdate ) yyyy MM dd ) PreToday from dual;
PRETODAY
上月首天
SQL> select to_char(add_months(last_day(sysdate)+ ) yyyy MM dd ) firstDay from dual;
FIRSTDAY
按照每周进行统计
SQL> select to_char(sysdate ww ) from dual group by to_char(sysdate ww );
TO
按照每月进行统计
SQL> select to_char(sysdate mm ) from dual group by to_char(sysdate mm );
TO
按照每季度进行统计
SQL> select to_char(sysdate q ) from dual group by to_char(sysdate q );
T
按照每年进行统计
SQL> select to_char(sysdate yyyy ) from dual group by to_char(sysdate yyyy );
TO_C
要找到某月中所有周五的具体日期
select to_char(t d YY MM DD ) from (
select trunc(sysdate MM )+rownum as d
from dba_objects
where rownum < ) t
where to_char(t d MM ) = to_char(sysdate MM ) 找出当前月份的周五的日期
and trim(to_char(t d Day )) = 星期五
如果把where to_char(t d MM ) = to_char(sysdate MM )改成sysdate 即为查找当前月份的前三个月中的每周五的日期
oracle中时间运算
内容如下
oracle支持对日期进行运算
日期运算时是以天为单位进行的
当需要以分秒等更小的单位算值时 按时间进制进行转换即可
进行时间进制转换时注意加括号 否则会出问题
SQL> alter session set nls_date_format= yyyy mm dd hh:mi:ss ;
会话已更改
SQL> set serverout on
SQL> declare
DateValue date;
begin
select sysdate into DateValue from dual;
dbms_output put_line( 源时间: ||to_char(DateValue));
dbms_output put_line( 源时间减 天: ||to_char(DateValue ));
dbms_output put_line( 源时间减 天 小时: ||to_char(DateValue / ));
dbms_output put_line( 源时间减 天 小时 分: ||to_char(DateValue / /( * )));
dbms_output put_line( 源时间减 天 小时 分 秒: ||to_char(DateValue / /( * ) /( * * )));
end;
/
源时间: : :
源时间减 天: : :
源时间减 天 小时: : :
源时间减 天 小时 分: : :
源时间减 天 小时 分 秒: : :
PL/SQL 过程已成功完成
在Oracle中实现时间相加处理
名称 Add_Times
功能 返回d 与NewTime相加以后的结果 实现时间的相加
说明 对于NewTime中的日期不予考虑
日期
版本
作者 Kevin
create or replace function Add_Times(d in date NewTime in date) return date
is
hh number;
mm number;
ss number;
hours number;
dResult date;
begin
下面依次取出时 分 秒
select to_number(to_char(NewTime HH )) into hh from dual;
select to_number(to_char(NewTime MI )) into mm from dual;
select to_number(to_char(NewTime SS )) into ss from dual;
换算出NewTime中小时总和 在一天的百分几
hours := (hh + (mm / ) + (ss / ))/ ;
得出时间相加后的结果
select d + hours into dResult from dual;
return(dResult);
end Add_Times;
测试用例
select Add_Times(sysdate to_date( : : YYYY MM DD HH :MI:SS )) from dual
在Oracle i中计算时间差
计算时间差是Oracle DATA数据类型的一个常见问题 Oracle支持日期计算 你可以创建诸如 日期 -日期 这样的表达式来计算这两个日期之间的时间差
一旦你发现了时间差异 你可以使用简单的技巧来以天 小时 分钟或者秒为单位来计算时间差 为了得到数据差 你必须选择合适的时间度量单位 这样就可以进行数据格式隐藏
使用完善复杂的转换函数来转换日期是一个诱惑 但是你会发现这不是最好的解决方法
round(to_number(end date start_date)) 消逝的时间(以天为单位)
round(to_number(end date start_date)* ) 消逝的时间(以小时为单位)
round(to_number(end date start_date)* ) 消逝的时间(以分钟为单位)
显示时间差的默认模式是什么?为了找到这个问题的答案 让我们进行一个简单的SQL *Plus查询
SQL> select sysdate (sysdate ) from dual;
SYSDATE (SYSDATE )
这里 我们看到了Oracle使用天来作为消逝时间的单位 所以我们可以很容易的使用转换函数来把它转换成小时或者分钟 然而 当分钟数不是一个整数时 我们就会遇到放置小数点的问题
Select
(sysdate (sysdate ))*
from
dual;
(SYSDATE (SYSDATE ))*
当然 我们可以用ROUND函数(即取整函数)来解决这个问题 但是要记住我们必须首先把DATE数据类型转换成NUMBER数据类型
Select
round(to_number(sysdate (sysdate ))* )
from
dual;
ROUND(TO_NUMBER(SYSDATE (SYSDATE ))* )
我们可以用这些函数把一个消逝时间近似转换成分钟并把这个值写入Oracle表格中 在这个例子里 我们有一个离线(logoff)系统级触发机制来计算已经开始的会话时间并把它放入一个Oracle STATSPACK USER_LOG扩展表格之中
Update
perfstat stats$user_log
set
elapsed_minutes =
round(to_number(logoff_time logon_time)* )
where
user = user_id
and
elapsed_minutes is NULL;
查出任一年月所含的工作日
CREATE OR REPLACE FUNCTION Get_WorkingDays(
ny IN VARCHAR
) RETURN INTEGER IS
/*
函数名称 Get_WorkingDays
中文名称 求某一年月中共有多少工作日
作者姓名: XINGPING
编写时间:
输入参数 NY:所求包含工作日数的年月 格式为yyyymm 如
返 回 值 整型值 包含的工作日数目
算法描述
) 列举出参数给出的年月中的每一天 这里使用了一个表(ljrq是我的库中的一张表 这个表可以是有权访问的 记录条数至少为 的任意一张表或视图)来构造出某年月的每一天
) 用这些日期和一个已知星期几的日期相减( 是星期天) 所得的差再对 求模 如果所求年月在 以前 那么所得的差既是负数 求模后所得值范围为大于 小于 如 表示星期六 故先将求模的结果加 再求 的模
) 过滤掉结果集中值为 和 的元素 然后求count 所得即为工作日数目
*/
Result INTEGER;
BEGIN
SELECT COUNT(*) INTO Result
FROM (SELECT MOD(MOD(q rq to_date( yyyy mm dd ) ) ) weekday
FROM ( SELECT to_date(ny||t dd yyyymmdd ) rq
FROM (SELECT substr( +ROWNUM ) dd
FROM ljrq z WHERE Rownum<=
) t
WHERE to_date(ny||t dd yyyymmdd )
BEEEN to_date(ny yyyymm )
AND last_day(to_date(ny yyyymm ))
)q
) a
WHERE a weekday NOT IN( );
RETURN Result;
END Get_WorkingDays;
______________________________________
还有一个版本
CREATE OR REPLACE FUNCTION Get_WorkingDays(
ny IN VARCHAR
) RETURN INTEGER IS
/*
函数名称 Get_WorkingDays
中文名称 求某一年月中共有多少工作日
作者姓名: XINGPING
编写时间:
输入参数 NY:所求包含工作日数的年月 格式为yyyymm 如
返 回 值 整型值 包含的工作日数目
算法描述 使用Last_day函数计算出参数所给年月共包含多少天 根据这个值来构造一个循环 在这个循环中先求这个月的每一天与一个已知是星期天的日期( 是星期天)的差 所得的差再对 求模 如果所求日期在 以前 那么所得的差既是负数 求模后所得值范围为大于 小于 如 表示星期六 故先将求模的结果加 再求 的模 如过所得值不等于 和 (即不是星期六和星期天) 则算一个工作日
*/
Result INTEGER := ;
myts INTEGER; 所给年月的天数
scts INTEGER; 某天距 所差的天数
rq DATE;
djt INTEGER := ;
BEGIN
myts := to_char(last_day(to_date(ny yyyymm )) dd );
LOOP
rq := TO_date(ny||substr( +djt ) yyyymmdd );
scts := rq to_date( yyyy mm dd );
IF MOD(MOD(scts )+ ) NOT IN( ) THEN
Result := Result + ;
END IF;
djt := djt + ;
EXIT WHEN djt>myts;
END LOOP;
RETURN Result;
cha138/Article/program/Oracle/201311/18138相关参考
Oracle中的临时表用法汇总 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!语法 在Oracle
Oracle中序列sequence用法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! )建立序列
createtablestuInfo ( stuIDintprimarykey stuNamevarchar() ) createorreplaceprocedureproc is
Oracle外连接和“+”号的用法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对于外连接Or
Oracle的Package的作用及用法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 公司需求
Oracle临时表用法的经验心得 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 文章主要介绍的是
OracleJOB用法小结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一设置初始化参数job
Inoracle/PLSQLthesubstrfunctionsallowsyoutoextractasubstringfromastring Thesyntaxforthesubstrfunc
所有的MIS系统都存在一个同样的需求就是对于特定的数据在一次批量操作过程中如果数据已经存在则对存在的数据按照现有情况进行 更新如果不存在则需要加入数据库这时我们就可以考虑采用Oracle的MER
cha138/Article/program/Oracle/201311/19107