时间加减
绝世美人儿
862次浏览
2021年01月29日 01:41
最佳经验
本文由作者推荐
生产技术部-病假条格式
Oracle
中的
TO_DATE
和
TO_CHAR
函数
Oracle
中的
TO_DATE
和
TO_CHAR
函数
oracle
中
TO_DATE
函数的时间格式,以
2008-09-10 23:45:56
为例
格式
说明
显示值
备注
Year(
年
):
yy two digits(
两位年
) 08
yyy
three digits(
三位年
) 008
yyyy four digits(
四位年
) 2008
Month(
月
):
mm number(
两位月
) 09
mon abbreviated(
字符集表示
) 9
月
若是英文版
,
则显示
sep
month spelled out(
字符集表示
) 9
月
若是英文版
,
则显示
september
Day(
日
):
dd number(
当月第几天
) 10
ddd number(
当年第几天
) 254
dy abbreviated(
当周第几天简写
)
星期三
若是英文版
,
则显示
wed
day spelled out(
当周第几天全写
)
星期三
若是英文版
,
则显示
wednesday
ddspth spelled out, ordinal twelfth tenth
Hour(
时
):
hh two digits(12
小时进制
) 11
hh24 two digits(24
小时进制
) 23
Minute(
分
):
mi two digits(60
进制
) 45
Second(
秒
):
ss two digits(60
进制
) 56
其他
:
Q digit(
季度
) 3
WW digit(
当年第几周
) 37
W digit(
当月第几周
) 2
说明:
12
小时格式下时间范围为:
1:00:00 - 12:59:59(12
小时制下的
12:59:59
对
应
24
小时制下的
00:59:59)
24
小时格式下时间范围为:
0:00:00 - 23:59:59
1.
日期和字符转换函数用法(
to_date
,to_char
)
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from
dual;
//
日期转化为字符串
select to_char(sysdate,'yyyy') as nowYear
from dual;
//
获取时间的
年
select to_char(sysdate,'mm')
as nowMonth from dual;
//
获取时间的
月
select
to_char(sysdate,'dd')
as
nowDay
from
dual;
//
获取时间的
日
select to_char(sysdate,'hh24') as nowHour
from dual;
//
获取时间的
时
select
to_char(sysdate,'mi')
as
nowMinute
from
dual;
//
获取时间的
分
select
to_char(sysdate,'ss')
as
nowSecond
from
dual;
//
获取时间的
秒
select
to_date
('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss')
from
dual//
2. select to_char(
to_date
(222,'J'),'Jsp') from dual
显示
Two Hundred Twenty-Two
3.
求某天是星期几
select to_char(
to_date
('2002-08-26','yyyy-mm- dd'),'day') from
dual;
星期一
select
to_char(
to_date
('2002-08-26','yyyy-mm- dd'),'day','NLS_DATE_LANGUAGE =
American') from dual;
monday
设置日期语言
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
也可以这样
TO_DATE
('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE =
American')
4.
两个日期间的天数
select floor(sysdate -
to_date
('20020405','yyyymmdd')) from
dual;
5.
时间为
null
的用法
select id, active_date from table1
UNION
select 1,
TO_DATE
(null) from dual;
注意要用
TO_DATE
(null)
6.
月份差
a_date between
to_date
('20011201','yyyymmdd') and
to_date
('20011231','yyyymmdd')
那么
12
月
31
号中午
12
点之后和
12
月
1
号的
12
点之前是不包含在这个范围< br>之内的。
所以,当时间需要精确的时候,觉得
to_char
还是必要的
7.
日期格式冲突问题
输入的格式要看你安装的
ORACLE
字符集的类型
,
比如
: US7ASCII, date
格
式的类型就是
: '01-Jan-01'
alter system set NLS_DATE_LANGUAGE = American
alter session set NLS_DATE_LANGUAGE = American
或者在
to_date
中写
select
to_char(
to_date
('2002-08-26','yyyy-mm- dd'),'day','NLS_DATE_LANGUAGE =
American') from dual;
注意我这只是举了
NLS_DATE_LANGUAGE
,当然还有很多,
可查看
select * from nls_session_parameters
select * from V$$NLS_PARAMETERS
8.
select count(*)
from ( select rownum-1 rnum
from all_objects
where rownum <=
to_date
('2002-02-28','yyyy-mm-dd') -
to_date
('2002-
02-01','yyyy-mm-dd')+1
)
where
to_char(
to_date
('2002-02-01','yyyy-mm-dd')+rnum-1,
'D'
)
not in ( '1', '7' )
查找2002-02-28
至
2002-02-01
间除星期一和七的天数
在前后分别调用
DBMS__TIME,
让后将结果相减
(
得到的是
1/100
秒
,
而不是毫秒
).
9.
查找月份
select
months_between(
to_date< br>('01-31-1999','MM-DD- YYYY'),
to_date
('12-31-1998
','MM-DD- YYYY')) "MONTHS" FROM DUAL;
1
select
m onths_between(
to_date
('02-01-1999','MM-DD- YYYY'),
to_date
('12-31-1998
','MM-DD- YYYY')) "MONTHS" FROM DUAL;
1.13
10. Next_day
的用法
Next_day(date, day)
Monday-Sunday, for format code DAY
Mon-Sun, for format code DY
1-7, for format code D
11
select to_char(sysdate,'hh:mi:ss') TIME from all_objects
注意:第一条记录的
TIME
与最后一行是一样的
可以建立一个函数来处理这个问题
create or replace function sys_date return date is
begin
return sysdate;
end;
select to_char(sys_date,'hh:mi:ss') from all_objects;
12.
获得小时数
extract()
找出日期或间隔值的字段值
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from
offer
SQL> select sysdate ,to_char(sysdate,'hh') from dual;
SYSDATE TO_CHAR(SYSDATE,'HH')
-------------------- ---------------------
2003-10-13 19:35:21 07
SQL> select sysdate ,to_char(sysdate,'hh24') from dual;
SYSDATE TO_CHAR(SYSDATE,'HH24')
-------------------- -----------------------
2003-10-13 19:35:21 19
13.
年月日的处理
select older_date,
newer_date,
years,
months,