ORACLE 日期格式,以时间 2008-11-21 13:45:25 为例: +++ 年的格式: yy 两位年 显示:08 yyy 三位年 显示:008 yyyy 四位年 显示:2008 +++ 月的格式: mm 数字表示 显示:11 mon 字符集简写表示 显示:11月,若是英文版,则显示nov month 字符集全写表示 显示:11月,若是英文版,则显示november +++ 日的格式: dd 当月第几天 显示:21 ddd 当年第几天 显示:21 dy 当周第几天简写 显示:星期五,若是英文版,则显示fri day 当周第几天全写 显示:星期五,若是英文版,则显示friday ddspth 拼写 显示:twenty-first +++ 时的格式: hh 12小时进制 显示:01 范围:1:00:00 - 12:59:59 hh24 24小时进制 显示:13 范围:0:00:00 - 23:59:59 +++ 分的格式: mi 60进制 显示:45 +++ 秒的格式: ss 60进制 显示:25 +++ 其它: Q 季度 显示:4 WW 当年第几周 显示:44 W 当月第几周 显示:1 +++ 例如: select to_char(sysdate) "默认", to_char(sysdate, 'dd-mm-yyyy') "dd-mm-yyyy", to_char(sysdate, 'yyyy-mm-dd') "yyyy-mm-dd", to_char(sysdate, 'yy') "yy", to_char(sysdate, 'yyy') "yyy", to_char(sysdate, 'yyyy') "yyyy", to_char(sysdate, 'mm') "数字月", to_char(sysdate, 'mon') "简写月", to_char(sysdate, 'month') "全写月", to_char(sysdate, 'd') "当周第几天", to_char(sysdate, 'dd') "当月第几天", to_char(sysdate, 'ddd') "当年第几天", to_char(sysdate, 'dy') "当周第几天简写", to_char(sysdate, 'day') "当周第几天全写", to_char(sysdate, 'ddspth') "ddspth", to_char(sysdate, 'Q') "季度", to_char(sysdate, 'WW') "当年第几周", to_char(sysdate, 'W') "当月第几周", to_char(sysdate, 'hh24:mi:ss') "hh24:mi:ss", to_char(sysdate, 'yy-mm-dd') "yy-mm-dd", to_char(sysdate, 'yyyy-mm-dd') "yyyy-mm-dd", to_char(sysdate, 'yy-mm-dd hh12:mi:ss') "yy-mm-dd hh12:mi:ss", to_char(sysdate, 'yyyy-mm-dd hh12:mi:ss') "yyyy-mm-dd hh12:mi:ss", to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') "yyyy-mm-dd hh24:mi:ss" from dual; +++ 1,to_char() ++ 日期和字符串之间的转换 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; select to_date('2008-11-21 13:45:25','yyyy-mm-dd hh24:mi:ss') from dual; ++ 获得某天是星期几 select to_char(to_date('2008-11-21 13:45:25','yyyy-mm-dd'),'day') from dual; select to_char(to_date('2008-11-21 13:45:25','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; +++ 2,round()舍入到最接近的日期 select sysdate S1, round(sysdate) S2, round(sysdate, 'year') YEAR, round(sysdate, 'month') MONTH, round(sysdate, 'day') DAY from dual; +++ 3,trunc()截断到最接近的日期(单位为天) select sysdate S1, trunc(sysdate) S2, /*返回当前日期,无时分秒 */ trunc(sysdate, 'year') YEAR, /*返回当前年的1月1日,无时分秒 */ trunc(sysdate, 'month') MONTH, /*返回当前月的1日,无时分秒 */ trunc(sysdate, 'day') DAY /*返回当前星期的星期天,无时分秒 */ from dual; +++ 4,next_day(datetime,day) ++ 返回下个星期的日期,day为“1~7”或“星期日~星期六”,“1”表示星期日 select next_day(to_date('2008-11-21', 'yyyy-mm-dd'), 6) from dual; +++ 5,last_day() ++ 最后一天 select last_day(sysdate) from dual; ++ 查找月的第一和最后一天 select Trunc(Trunc(SYSDATE, 'MONTH') - 1, 'MONTH') First_Day_Last_Month, Trunc(SYSDATE, 'MONTH') - 1 / 86400 Last_Day_Last_Month, Trunc(SYSDATE, 'MONTH') First_Day_Cur_Month, LAST_DAY(Trunc(SYSDATE, 'MONTH')) + 1 - 1 / 86400 Last_Day_Cur_Month from dual; +++ 6,add_months() ++ 当前日期减到两个月 select add_months(last_day(sysdate) + 1, -2) from dual; ++ 获得今年天数 select add_months(trunc(sysdate, 'year'), 12) - trunc(sysdate, 'year') from dual; +++ 7,new_time()时区处理 select to_char(NEW_TIME(sysdate, 'GMT', 'EST'), 'dd/mm/yyyy hh:mi:ss'),sysdate from dual; +++ 8,greatest()返回日期列表中最晚的日期 select greatest('01-1月-04', '04-1月-04', '10-2月-04') from dual +++ 9,拼写 select to_char( to_date(222,'J'),'Jsp') from dual; 显示:Two Hundred Twenty-Two +++ 10,日期运算 Oracle时间相加减以天为单位,设变量为n,换算成年、月、日。 select floor(to_number(sysdate - to_date('2007-11-02 15:55:03', 'yyyy-mm-dd hh24:mi:ss')) / 365) "相差年" from dual; select floor(sysdate - to_date('20081121', 'yyyymmdd')) "相差天数" from dual; select floor(sysdate - to_date('20081121', 'yyyy-mm-dd')) "相差天数" from dual; select floor(sysdate - to_date('2008-11-21', 'yyyy-mm-dd')) "相差天数" from dual; select floor(to_number(sysdate - to_date('2008-11-21', 'yyyy-mm-dd'))) "相差天数" from dual; select months_between(to_date('2008-12-01', 'yyyy-mm-dd'), to_date('2008-10-01', 'yyyy-mm-dd')) "相差月" from dual; select months_between(to_date('2008-2-1', 'yyyy-mm-dd'), to_date('2007-12-31', 'yyyy-mm-dd')) "相差月" from dual; select floor(to_number(sysdate - to_date('2008-10-21 24:00:00', 'yyyy-mm-dd hh24:mi:ss')) * 24) "相差时" from dual; select floor(to_number(sysdate - to_date('2008-10-21 24:00:00', 'yyyy-mm-dd hh24:mi:ss')) * 24 * 60) "相差分" from dual; select floor(to_number(sysdate - to_date('2008-10-21 24:00:00', 'yyyy-mm-dd hh24:mi:ss')) * 24 * 60 * 60) "相差秒" from dual; select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'), to_char(sysdate + n * 365, 'yyyy-mm-dd hh24:mi:ss') "改变时间-年" from dual; select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'), add_months(sysdate, n) "改变时间-月" from dual; select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'), to_char(sysdate + n, 'yyyy-mm-dd hh24:mi:ss') "改变时间-日" from dual; select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'), to_char(sysdate + n / 24, 'yyyy-mm-dd hh24:mi:ss') "改变时间-时" from dual; select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'), to_char(sysdate + n / 24 / 60, 'yyyy-mm-dd hh24:mi:ss') "改变时间-分" from dual; select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'), to_char(sysdate + n / 24 / 60 / 60, 'yyyy-mm-dd hh24:mi:ss') "改变时间-秒" from dual; +++ 11,设置日期格式 ++ 日期格式要看你安装的ORACLE字符集的类型,如:US7ASCII,日期是'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; ++ 可以用如下SQL语句查看参数: select * from nls_session_parameters; ------------------------------------------------------------------------------------ PARAMETER VALUE NLS_LANGUAGE SIMPLIFIED CHINESE NLS_TERRITORY CHINA NLS_CURRENCY RMB NLS_ISO_CURRENCY CHINA NLS_NUMERIC_CHARACTERS ., NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE SIMPLIFIED CHINESE NLS_SORT BINARY NLS_TIME_FORMAT HH.MI.SSXFF AM NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR NLS_DUAL_CURRENCY RMB NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE ------------------------------------------------------------------------------------ select * from V$NLS_PARAMETERS; ------------------------------------------------------------------------------------ PARAMETER VALUE NLS_LANGUAGE SIMPLIFIED CHINESE NLS_TERRITORY CHINA NLS_CURRENCY RMB NLS_ISO_CURRENCY CHINA NLS_NUMERIC_CHARACTERS ., NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE SIMPLIFIED CHINESE NLS_CHARACTERSET ZHS16GBK NLS_SORT BINARY NLS_TIME_FORMAT HH.MI.SSXFF AM NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR NLS_DUAL_CURRENCY RMB NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE ------------------------------------------------------------------------------------