1. 使用 TO_CHAR() 和 TO_DATE() 转换时间值
TO_CHAR(x[,format]) 将x转换为字符串,该函数还可以为x提供可选参数format
TO_DATE(x[,format]) 将字符串x转换为DATE类型,该函数也提供了可选参数format
1.1 使用TO_CHAR() 将时间值转换为字符串
select to_char(sysdate,'MONTH DD,YYYY,HH24:MI:SS') from dual;
1.2 使用TO_DATE() 将字符串转换为时间值
select to_date('04,JUL-2014'),to_date('04-JUL-12') from dual; --(未指定格式,采用默认日期格式)
select to_date('2014-09-13','YYYY-MM-DD') from dual; (正确)
select to_date('2014-09-13','Y-MM-DD') from dual; (错误)
故:FORMAT的作用是用于格式化传递的字符串。
select to_date('11.1.14','MM.DD.YY') from dual;
2. Oracle 对年份的处理
注:应该始终使用完整的4位年份,这样,就不会对到底指哪一年产生混淆
3. 使用时间值函数
4. 使用时区
时区是当地时间与英格兰格林威治时间的时差(UTC)
时间也可以使用地理区域来指定,例如,PST 表示太平洋标准时间,它比UTC 晚8个小时
4.1 与时区有关的函数
4.2 将时间值从一个时区转换为另一个时区
select to_char(NEW_TIME(to_date('25-MAY-2012 19:45'),'DD-MON-YYYY HH24:MI'),'PST','EST'),
'DD-MON-YYYY HH24:MI') from dual;
5. 使用时间戳
TIMESTAMP 'YYYY-MM-DD HH24:MI:SS.SSSSSSSSS'
6. 与时间戳有关的函数
select current_timestamp,localtimestamp,systimestamp from dual;
7. 使用时间间隔
注:时间间隔记录的是一段时间长度(例如1年零3个月),而时间值或时间戳记录的是特定的日期
和时间(例如2006年10月28日下午7点32分16秒)
7.1 使用INTERVAL YEAR TO MONTH 类型
CRATE TABLE coupons(
coupon_id INTEGER CONSTARINT coupons_pk PRIMARY KEY,
name VARCHAR2(30) NOT NULL,
duration INTERVAL YEAR(3) TO MONTH
);
要向数据库提供INTERVAL YEAR TO MONTH 字面值,可以使用下面的简化语法:
INTERVAL '[+|-][y][-m]' [YEAR[(years_precision)]] [TO MONTH]
7.2 使用INTERVAL DAY TO SECOND 类型
CREATE TABLE promotions
(
promotion_id INTEGER CONSTRAINT promotions_pk PRIMARY KEY,
name VARCHAR2(30) NOT NULL,
duration INTERVAL DAY(5) TO SECOND(4)
);
要向数据库提供INTERVAL DAY TO SECOND 字面值,可以使用下面的简化语法:
INTERVAL '[+|-][d] [h[:m[:s]]]' [DAY[(days_precision]]
[TO HOUR | TO_MINUTE | SECOND[(seconds_precision)]]
7. 与时间间隔有关的函数
7.1 NUMTODSINTERVAL()
SELECT NUMTODSINTERVAL(1.5,'DAY'),
NUMTODSINTERVAL(3.25,'HOUR'),
NUMTODSINTERVAL(5,'MINUTE'),
NUMTODSINTERVAL(10.12345,'SECOND')
FROM DUAL;
7.2 NUMTOYMINTERVAL()
SELECT NUMTOYMINTERVAL(1.5,'YEAR'),
NUMTOYMINTERVAL(3.25,'MONTH'),
NUMTOYMINTERVAL(3.7,'MONTH') ==> (四舍五入对月份)
FROM DUAL;
select sysdate,add_months(sysdate,-12) from dual; -- 减12个月
select sysdate,add_months(sysdate,-1) from dual; -- 减1个月
select sysdate,to_char(sysdate-7,'yyyy-mm-dd hh24:mi:ss') from dual; -- 减一个星期(7天)
select sysdate,to_char(sysdate-1,'yyyy-mm-dd hh24:mi:ss') from dual; -- 减一天
select sysdate,to_char(sysdate-1/24,'yyyy-mm-dd hh24:mi:ss') from dual; -- 减一小时
select sysdate,to_char(sysdate-1/24/60,'yyyy-mm-dd hh24:mi:ss') from dual; -- 减一分钟
select sysdate,to_char(sysdate-1/24/60/60,'yyyy-mm-dd hh24:mi:ss') from dual; -- 减一秒钟