SQL函数之日期函数

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;       -- 减一秒钟

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值