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

文章作者: zlinks
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ZFS的成长之路
Oracle Oracle函数
喜欢就支持一下吧