Oracle日期和时间的存储于处理
本章内容包括:
成都创新互联公司服务项目包括忻府网站建设、忻府网站制作、忻府网页制作以及忻府网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,忻府网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到忻府省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
处理并存储一个特定的日期和时间。DATE类型可以存储世纪、4位年份、月、日、时、分和秒
使用时间戳timestamp,时间戳可以存储一个特定的日期和时间。时间戳的优点是可以存储带有小数位的秒,还可以存储时区
使用时间间隔interval,时间间隔可以存储时间的长度。如1年零3个月等。
在Oracle数据库中,默认情况下,日期以DD-MON-YYYY格式保存到数据库中,其中:
DD是一个两位的天数
MON是月份中的前三个字母,如FEB
YYYY是一个4位的年份。
默认情况下数据库以DD-MON-YY格式返回日期,其中YY是年份的最后两位。
1、使用TO_DATE()和TO_CHAR()转换时间值。
TO_CHAR(x[,format])用于将时间值x转化为字符串,该函数提供一个可选参数format来说明x的格式。
SQL> select sysdate from dual; SYSDATE ----------- 2016/6/9 12 SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual; TO_CHAR(SYSDATE,'YYYY-MM-DDHH2 ------------------------------ 2016-06-09 12:32:28 SQL> select to_char(sysdate) from dual; TO_CHAR(SYSDATE) ---------------- 09-6月 -16
TO_DATE(x[,format])用于将字符串x转化为时间值,该函数可以指定一个可选字符串format参数来说明x的格式。如果没有指定format参数,日期就是用默认的数据库格式。x的格式要与format指定的格式一样。
SQL> select to_char(to_date('05-6月-2016 12:38:23','DD-MON-YYYY HH24:MI:SS'),'HH24:MI:SS') as time 2 from dual; TIME -------- 12:38:23
设置默认的日期格式。默认的日期格式是在数据库参数NLS_DATE_FORMAT中指定的。可以用下面的语句来修改。
SQL> alter session set nls_date_format = 'YYYY-MM-DD'; Session altered
2、使用时间值函数
时间值函数用于获取或处理时间值和时间戳。
函数 | 说明 |
ADD_MONTHS(x,y) | 返回x加上y个月后的结果,如果y是负数,就从x中减去y个月 |
LAST_DAY(x) | 返回包含x的月的最后一天 |
MONTHS_BETWEEN(x,y) | 返回x和y之间有几个月。如果x>y返回正数,否则返回负数。 |
NEXT_DAY(x,day) | 返回从x开始,到下个day的时间值;day是一个文本字符串 |
ROUND(x[,unit]) | 对x取整。 |
SYSDATE | 返回数据库服务器所在的操作系统中设置的当前时间值 |
TRUNC(x[,unit]) | 对x进行截断。默认情况下,x被截断为当天的开始时间。 |
SQL> select sysdate from dual; SYSDATE ----------- 2016/6/9 12 SQL> select add_months(sysdate,1) from dual; ADD_MONTHS(SYSDATE,1) --------------------- 2016/7/9 12:52:03 SQL> select add_months(sysdate,-1) from dual; ADD_MONTHS(SYSDATE,-1) ---------------------- 2016/5/9 12:52:15 SQL> select last_day(to_char(sysdate)) from dual; LAST_DAY(TO_CHAR(SYSDATE)) -------------------------- 2016/6/30 SQL> select months_between('09-06月-2016','08-10月-2016') from dual; select months_between('09-06月-2016','08-10月-2016') from dual ORA-01861: 文字与格式字符串不匹配 SQL> select months_between('2016-06-09','2016-10-08') from dual; MONTHS_BETWEEN('2016-06-09','2 ------------------------------ -3.96774193548387 SQL> select months_between('2016-10-09','2016-06-09') from dual; MONTHS_BETWEEN('2016-10-09','2 ------------------------------ 4
3、使用时间戳
CURRENT_TIMESTAMP、LOCALTIMESTAMP、SYSTIMESTAMP返回当前回话的日期和时间以及时区
EXTRACT 从时间戳类型或者DATE类型中提取并返回年月日时分秒或时期
TO_TIMESTAMP(x[,format])用于将字符串x转化为一个TIMESTAMP类型,format指定转化类型
4、使用时间间隔INTERVAL
举例:优惠券有效期,打折促销的时间
类型 | 说明 |
INTERVAL_YEAR[(years_option)] TO_MONTH | 存储一个时间间隔,其单位是年和月;可以通过years_option参数来指定年的精确度,默认精度是2,意思是可以在时间间隔中为年数存储两位数字。如果试图向表中添加年数超过INTERVAL_YEAR TO MONTH列可以存储的记录,就会返回一个错误。时间间隔既可以存储正数,也可以存储负数 |
INTERVAL_DAY[(days_option)] TO_SECOND[(seconds_precision)] | 存储一个时间间隔,其单位是天和秒;可以动过指定可选的days_precision参数来指定天的精度,该参数是一个0~9的整数。默认值是2。 |
使用INTERVAL_YEAR TO MONTH类型
创建表coupons用来存储优惠券信息。duration用来记录优惠券有效的时间间隔。
SQL> create table coupons( 2 coupon_id integer constraint coups_pk primary key, 3 name varchar2(30) not null, 4 duration INTERVAL YEAR(3) TO MONTH 5 ); Table created
要想数据库提供一个INTERVAL YEAR TO MONTH字面值,可以使用以下语法:
INTERVAL '[+|-][y][-m]' [YEAR[(years_precisiion)]] [TO_MONTH]
示例:
时间间隔字面量 | 说明 |
INTERVAL '1' YEAR | |
INTERVAL '11' MONTH | 时间间隔11个月(14>12 == 1年零2个月) |
INTERVAL '1-3' YEAR TO MONTH | 时间间隔为1年零3个月 |
INTERVAL '0-5' YEAR TO MONTH | 时间间隔为0年5个月 |
INTERVAL '-1-5' YEAR TO MONTH | 时间间隔为负数,值为1年零5个月 |
SQL> INSERT INTO coupons(coupon_id,name,duration) 2 values(1,'$1 off Z Files',INTERVAL '1' YEAR); 1 row inserted SQL> INSERT INTO coupons(coupon_id,name,duration) 2 values(2,'$2 off Pop 3',INTERVAL '11' MONTH); 1 row inserted SQL> INSERT INTO coupons(coupon_id,name,duration) values(3,'$2 off Pop 31',INTERVAL '2' MONTH); 1 row inserted SQL> select * from coupons; COUPON_ID NAME DURATION --------------------------------------- ------------------------------ ------------------------------------------------------------------------------- 1 $1 off Z Files +001-00 2 $2 off Pop 3 +000-11 3 $2 off Pop 31 +000-02
当前题目:Oracle日期和时间的存储于处理
网页链接:http://myzitong.com/article/pecggj.html