Oracle 中的 TO_DATE 和 TO_CHAR 函数
30分钟:sysdate+1/48
1个小时:sysdate+1/24
一天:sysdate+1
一个星期: sysdate+7
每个星期五中午:
NEXT_DAY(TRUNC(SYSDATE),'星期五') + 12/24
一个月:add_months(sysdate,1) --可以为正负数
一年:add_months(sysdate,12)
月份加减:select to_char(add_months(sysdate-1),'yyyymm') from dual;
日期加减:select to_char(sysdate-1,'yyyymmdd') from dual;
select sysdate from dual;得到是当前时间。如果不加任何转化的话,默认的天。
select syddate+1 from dual;--后一天
select sydate-1 from dual;--前一天
1个小时:sysdate+1/24
一天:sysdate+1
一个星期: sysdate+7
每个星期五中午:
NEXT_DAY(TRUNC(SYSDATE),'星期五') + 12/24
一个月:add_months(sysdate,1) --可以为正负数
一年:add_months(sysdate,12)
月份加减:select to_char(add_months(sysdate-1),'yyyymm') from dual;
日期加减:select to_char(sysdate-1,'yyyymmdd') from dual;
select sysdate from dual;得到是当前时间。如果不加任何转化的话,默认的天。
select syddate+1 from dual;--后一天
select sydate-1 from dual;--前一天
select sysdate+30/60/24 from dual;--后30分钟
select sysdate-30/60/24 from dual;--前30分钟
oracle to_char 时间格式
日期格式参数 | 含义说明 |
D | 一周中的星期几 |
DAY | 天的名字,使用空格填充到9个字符 |
DD | 月中的第几天 |
DDD | 年中的第几天 |
DY | 天的简写名 |
IW | ISO标准的年中的第几周 |
IYYY | ISO标准的四位年份 |
YYYY | 四位年份 |
YYY,YY,Y | 年份的最后三位,两位,一位 |
HH | 小时,按12小时计 |
HH24 | 小时,按24小时计 |
MI | 分 |
SS | 秒 |
MM | 月 |
Mon | 月份的简写 |
Month | 月份的全名 |
W | 该月的第几个星期 |
WW | 年中的第几个星期 |
用于日期/时间 to_char() 版本的Format-pictures。
Format-picture | 描述 |
HH | 一天中的小时 (01-12) |
HH12 | 一天中的小时 (01-12) |
MI | 分钟 (00-59) |
SS | 秒 (00-59) |
SSSS | 过了午夜的秒 (0-86399) |
Y,YYY | 带逗号的年 (4 或更多位) |
YYYY | 年 (4 或更多位) |
oracle中trunc函数用法 YYY | 年的最后三位 |
YY | 年的最后两位 |
Y | 年的最后一位 |
MONTH | 完整的月份名(9字符)-所有字符大写 |
Month | 完整的月份名(9字符)-首字符大写 |
month | 完整的月份名(9字符)-所有字符小写 |
MON | 缩写的月份名(3字符)-所有字符大写 |
Mon | 缩写的月份名(3字符)-首字符大写 |
mon | 缩写的月份名(3字符)-所有字符小写 |
MM | 月份(01-12) |
DAY | 完整的日期名(9字符)-所有字符大写 |
Day | 完整的日期名(9字符)-首字符大写 |
day | 完整的日期名(9字符)-所有字符小写 |
DY | 缩写的日期名(3字符)-所有字符大写 |
Dy | 缩写的日期名(3字符)-首字符大写 |
dy | 缩写的日期名(3字符)-所有字符小写 |
DDD | 一年中的日子 (001-366) |
DD | 一月中的日子 (01-31) |
D | 一周中的日子 (1-7; SUN=1) |
W | 月中的周 |
WW | 年中的周 |
CC | 世纪(两位) |
J | julian 日子(从4712 BC 年一月一日以来的日子) |
Q | 季度 |
RM | 罗马数字的月份 (I-XII; I=JAN) |
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
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
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
hh two digits(12小时进制) 11
hh24 two digits(24小时进制) 23
Minute(分):
mi two digits(60进制) 45
mi two digits(60进制) 45
Second(秒):
ss two digits(60进制) 56
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
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_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
显示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';
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')
TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')
4. 两个日期间的天数
select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;
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)
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点之前是不包含在这个范围之内的。
所以,当时间需要精确的时候,觉得to_char还是必要的
a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')
那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。
所以,当时间需要精确的时候,觉得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(*)
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_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).
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_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).
9. 查月份
select months_between(to_date('01-31-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
1
select months_between(to_date('01-31-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
1
select months_between(to_date('02-01-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
1.03225806451613
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
1.03225806451613
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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论