一、日期格式
1.1 日期格式
YYYY-MM-DD 年-月-日HH24:MI:SS 时:分:秒(HH12、HH : 均为 12 小时制 )
select to_char( sysdate, 'YYYY-MM-DD HH24:MI:SS' ) 当前时间 from dual;
1.2 注意:一周的第一天是周日
1.3 日期展示示例
SELECT SYSDATE 当前时间,
trunc( SYSDATE) 今日0 点,
trunc( SYSDATE) + 6 / 24 当天6 点,
to_char( SYSDATE, 'YYYY' ) 四位年,
to_char( SYSDATE, 'YY' ) 两位年,
to_char( SYSDATE, 'MM' ) 月份,
to_char( SYSDATE, 'MONTH' ) 月份带月份名,
to_char( SYSDATE, 'MON' ) 月份带月份名简称,
to_char( SYSDATE, 'RM' ) 月份罗马数字,
to_char( SYSDATE, 'DDD' ) 当年第n天,
to_char( SYSDATE, 'DD' ) 当月第n天,
to_char( SYSDATE, 'D' ) 当周第n天,
to_char( SYSDATE, 'DY' ) 星期几,
to_char( SYSDATE, 'Q' ) 当年第n季度,
to_char( SYSDATE, 'WW' ) 当年第n周,
to_char( SYSDATE, 'W' ) 本月第n周,
to_char( SYSDATE, 'HH24' ) 24 小时制,
to_char( SYSDATE, 'HH12' ) 12 小时制
FROM dual;
二、常用日期函数
2.1 字符串转换为日期:to_date()
select to_date( '2023-11-07 16:35:33' , 'yyyy-mm-dd hh24:mi:ss' ) result from dual;
2.2 返回特定日期月份的最后一天:last_day()
select last_day(sysdate) from dual;
2.3 增加或减去月份:add_months()
select add_months( sysdate, 1 ) result from dual;
select add_months( sysdate, - 1 ) result from dual;
select sysdate - 1 from dual;
select sysdate + 1 from dual;
2.4 比较两个时间的月份差:months_between(date1, date2)
select months_between( sysdate, to_date( '2023-02-22' , 'yyyy-mm-dd' ) ) from dual;
三、项目实例
3.1 加减时间
SELECT SYSDATE "当前时间" ,
SYSDATE + 1 "加一天" ,
SYSDATE - 1 "减一天" ,
SYSDATE + ( 1 / 24 ) "加一小时" ,
SYSDATE + ( 1 / 24 / 60 ) "加一分钟" ,
SYSDATE + ( 1 / 24 / 60 / 60 ) "加一秒钟"
FROM dual;
3.2 判断当前时间为星期几、几月份、年份
SELECT to_char( SYSDATE, 'D' ) - 1 FROM dual;
SELECT to_char( sysdate, 'day' ) FROM dual;
select to_char( to_date( '2023-11-11' , 'YYYY-MM-DD' ) , 'DY' ) from dual;
SELECT to_char( to_date( '2023-11-11' , 'YYYY-MM-DD' ) , 'MM' ) 当前月份,
to_char( to_date( '2023-11-11' , 'YYYY-MM-DD' ) , 'YYYY' ) 当前年份
FROM dual;
SELECT trunc( SYSDATE, 'DD' ) 今天的开始,
trunc( SYSDATE, 'iw' ) 这周的第一天,
trunc( SYSDATE, 'MM' ) 这个月的第一天,
trunc( SYSDATE, 'q' ) 这个季度的第一天,
trunc( SYSDATE, 'YYYY' ) 今年第一天,
extract( day from last_day( sysdate) ) 当月天数
FROM dual;
3.3 两个时间的时间差
SELECT TIME 具体相差时间,
floor( TIME ) 相差天数,
CASE
WHEN TIME < 1 THEN
trunc( TIME * 24 )
WHEN TIME > 1 THEN
MOD ( trunc( TIME * 24 ) , 24 )
ELSE
0
END AS 小时差,
trunc( TIME * 24 * 60 - 60 * trunc( TIME * 24 ) ) 分钟差,
trunc( TIME * 24 * 60 * 60 - 60 * trunc( TIME * 24 * 60 ) ) 秒差
FROM ( SELECT to_number( SYSDATE - to_date( '1999-02-22 20:20:20' , 'YYYY-MM-DD hh24:mi:ss' ) ) AS TIME
FROM dual)
3.4 判断当前时间是今年的那一天
SELECT to_char( SYSDATE, 'D' ) - 1 本周第几天,
to_char( SYSDATE, 'DD' ) 本月第几天,
to_char( SYSDATE, 'DDD' ) 本年第几天
FROM dual;