Oracle date相关
date转化为星期
to_char(date,'DAY') --转为星期
to_char(date,'D') --转为数字,1-7为星期日到星期一
to_char(date)
select sysdate,to_char(sysdate,'yyyy')from dual; --年
select sysdate,to_char(sysdate,'mm')from dual;--月
select sysdate,to_char(sysdate,'hh24')from dual;--时
select sysdate,to_char(sysdate,'mi')from dual;--分
date计算差值
年
months_between(date1,date2)/12
月份
months_between(date1,date2)
天数
在Oracle中,两个日期直接相减,便可以得到天数;
date1-date2
trunc(date1-date2) --取整
小时
(date1-date2)*24
分钟
(date1-date2)*24*60
秒
(date1-date2)*24*60*60
其他函数
ADD_MONTHS(date,number)
返回日期时间date加number月后对应的日期时间。number为正时则表示number月之后;number为负时则表示为number月之前;N为小数则会自动先删除小数部分,而用整数部分
SQL> select add_months(to_date('2023-06-15 10:25:00','YYYY-MM-DD-HH24-MI-SS'),1) from dual;
ADD_MONTHS(TO_DATE('2023-06-1510:25:00','YYYY-MM-DD-HH24-MI-SS'),1)
-------------------------------------------------------------------
2023/7/15 10:25:00
CURRENT_DATE 返回当前会话时区时间
sysdate 返回当前服务器时间
CURRENT_TIMESTAMP 返回当前会话时间戳
格式:CURRENT_TIMESTAMP([P]) 说明:返回当前会话时区所对应的日期时间时间戳。P为精度,可以是O—9之间的一个整数,默认为6
DBTIMEZONE 返回数据库时区
EXTRACT
格式:EXTRACT(C,FROM D) 说明:返回日期时间D中指定的部分C。C的取值为YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,TIMEZONE_HOUR,TIMEZONE_MINUTE, TIMEZONE_REGION, TIMEZONE_ABBR。指定的C必须在D中存在
SELECT EXTRACT(YEAR FROM SYSDATE) 年,
EXTRACT(MONTH FROM SYSDATE) 月,
EXTRACT(DAY FROM SYSDATE) 日,
EXTRACT(hour FROM Systimestamp) 时,
EXTRACT(minute FROM Systimestamp) 分,
EXTRACT(SECOND FROM Systimestamp) 秒
FROM dual;
LAST_DAY(date) 返回date所在月份的最后一天
LOCALTIMESTAMP(P)
返回当前会话时区的日期时间。P为精度,可以是0-9之间的一个整数,默认为6。与CURRENT_TIMESTAMP在返回值的数据类型上有区别
NEXT_DAY(D,C)
返回日期D后的下一个C。C是一个字符串,表示用当前会话语言表示的一周中某一天的全称(如星期一、星期二等),也可以是数值。
ROUND(四舍五入)
格式:ROUND(date,fmt) 说明:日期的四舍五入。
fmt为year或者YY,按**1-6月和7-12月**四舍五入到最近的几几年1月1日
fmt为month或者MM,按**1-15日和16-30日**四舍五入到最近的几月1日
fmt为day,按**周一到周三和周四到周日**四舍五入到最近的周日
fmt为DD,如果小时超过12,向前进1
fmt为HH,如果分超过30,向前进1
fmt为分MI,到分,秒数30是分界线,相当于四舍五入的5,如果秒超过30,向前进1
fmt为秒SS,精确到秒
TRUNC(不四舍五入)
格式:TRUNC(d[,fmt]) 说明:截断日期,只有d一个参数时,返回日期时间。
fmt为yyyy或者yy时,返回当年第一天
fmt为mm时,返回当月第一天
fmt为dd时,返回当前年月日
fmt为d时,返回当前星期的第一天
fmt为hh时,截取到当前的小时
fmt为mi时,截取到当前的分钟
计算某一年各星期的次数
WITH x1 AS
(SELECT to_char((trunc(SYSDATE, 'YYYY') + (LEVEL - 1)), 'DAY') AS 星期
FROM dual
CONNECT BY LEVEL <= (add_months(trunc(SYSDATE, 'YYYY'), 12) -
trunc(SYSDATE, 'YYYY')))
SELECT 星期, COUNT(1) FROM x1 GROUP BY 星期;
(trunc(SYSDATE, 'YYYY')
获取当年的第一天日期
trunc(SYSDATE, 'YYYY') + (LEVEL - 1)
获取每一天的日期
to_char((trunc(SYSDATE, 'YYYY') + (LEVEL - 1)), 'DAY')
获取每天对应的星期
(add_months(trunc(SYSDATE, 'YYYY'), 12)
下一年年初的日期
(add_months(trunc(SYSDATE, 'YYYY'), 12) -trunc(SYSDATE, 'YYYY')))
当年的天数 其中
sysdate
可以修改为to_date('年份','yyyy')
计算年内某个星期所在日期
SELECT 日期, to_char(日期, 'day') 星期
FROM (SELECT TRUNC(SYSDATE, 'y') + (LEVEL - 1) AS 日期
FROM dual
CONNECT BY LEVEL <= (add_months(TRUNC(SYSDATE, 'y'), 12)) -
TRUNC(SYSDATE, 'y'))
WHERE to_char(日期, 'd') = 6