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
------------------------------------------------------------------------------------
Oracle日期类型的使用
最新推荐文章于 2024-10-16 11:02:39 发布