CURRENT_DATE, EXTRACT ,ADD_MONTHS ,TRUNC ,CAST
,MOD ,ABS,TYPE,LAST_DAY,TO_CHAR
DATE --日期类型 '2019-10-31'
TIME --时间类型 '23:11:00'
TIMESTAMP --时间戳 '2019-10-31 23:11:00.000000'
CURRENT_DATE --返回当前日期 (2019/11/1)
CURRENT_TIME --返回当前时间 (12:22:40)
LAST_DAY --月末,返回当月最后一天
TYPE() --检查数值类型
CAST('20191031' AS DATE FORMAT 'YYYYMMDD') --字符串变成日期
DATE '2019-01-31' --字符串变成日期
TO_CHAR(CURRENT_DATE) --转换成字符类型
ADD_MONTHS(DATE '2019-02-28', 1) --下月同一天。返回结果:'2019-03-28'
ADD_MONTHS(DATE '2019-01-31', 1) --下月同一天。返回结果:'2019-02-28'
ADD_MONTHS(DATE '2019-03-31',-1) --上月同一天。返回结果:'2019-02-28'
EXTRACT( YEAR FROM CURRENT_DATE) --获取日期中的年份(返回int类型)
EXTRACT( MONTH FROM CURRENT_DATE) --获取月份
EXTRACT( DAY FROM CURRENT_DATE) --获取T天
TRUNC(CURRENT_DATE,'MM') --月初。返回date类型
TRUNC(CURRENT_DATE,'MM')-1 --上月末
TRUNC(CURRENT_DATE,'YEAR') --年初
CURRENT_DATE --今天
CURRENT_DATE-1 --昨天
CURRENT_DATE+1 --明天
TRUNC(ADD_MONTHS(CURRENT_DATE,1),'MM')-1 --月末
EXTRACT(DAY FROM CURRENT_DATE+1)=1 --月末判断
EXTRACT(DAY FROM LAST_DAY(CURRENT_DATE)) --当月天数
(EXTRACT(MONTH FROM CURRENT_DATE)+2)/3 --当前季度(量个int类型计算结果为int)
(EXTRACT(MONTH FROM current_date)MOD 3) =0 --季末判断
ADD_MONTHS(TRUNC(current_date,'MM'),NVL(NULLIFZERO((EXTRACT(MONTH FROM CURRENT_DATE) MOD 3)*-1),-3)+1) --本季度初
ADD_MONTHS(TRUNC(current_date,'MM'),4-NVL(NULLIFZERO((EXTRACT(MONTH FROM CURRENT_DATE)MOD 3)),3))-1 --本季度末
NVL(NULLIFZERO((CURRENT-DATE'1979-12-30') MOD 7),7) --今天是周几
CURRENT_DATE-NVL(NULLIFZERO((CURRENT-DATE'1979-12-30') MOD 7),7)+1 --本周一
CURRENT_DATE-NVL(NULLIFZERO((CURRENT-DATE'1979-12-30') MOD 7),7)+7 --本周末
CURRENT_DATE-NVL(NULLIFZERO((CURRENT-DATE'1979-12-30') MOD 7),7)-7+1 --上周一
CURRENT_DATE-NVL(NULLIFZERO((CURRENT-DATE'1979-12-30') MOD 7),7)-7+7 --上周末
--生肖算法 (或用Case When)
DECODE((SUBSTR(DATE1 ,1,4)-'1900')MOD 12 ,0,'鼠' ,1,'牛' ,2,'虎' ,3,'兔' ,4,'龙' ,5,'蛇' ,6,'马' ,7,'羊' ,8,'猴' ,9,'鸡' ,10,'狗' ,11,'猪')
MONTH
DAY
DAY TO HOUR
DAY TO MINUTE
DAY TO SECOND
HOUR
HOUR TO MINUTE
HOUR TO SECOND
MINUTE
MINUTE TO SECOND
SECOND
SELECT (DATE1 - DATE2) MONTH --两个时间相差的月份, 样式如:23个月 (只取整数位)
SELECT (DATE1 - DATE2) HOUR --两个时间相差的小时, 样式如:12个小时
SELECT (DATE1 - DATE2) MINUTE --两个时间相差的分钟, 样式如:12分钟
SELECT (DATE1 - DATE2) HOUR TO MINUTE --两个事件相差的小时, 样式如: 1:30:02 (用时间样式表示)
SELECT (TIMESTAMP1-TIMESTAMP2) MINUTE TO SECOND --两个时间戳间隔分钟数
SELECT (TIMESTAMP1-TIMESTAMP2) SECOND --两个时间戳相差秒数(最大值为100,超出100秒会报值类型溢出)
--时间戳间隔(跨行做差时请先转换成int类型)
SELECT
(CAST(TIMESTAMP1 AS DATE)-CAST(TIMESTAMP2 AS DATE))*24*3600 --天
(EXTRACT(HOUR FROM TIMESTAMP1) - EXTRACT(HOUR FROM TIMESTAMP2))*3600 --小时
(EXTRACT(MINUTE FROM TIMESTAMP1) - EXTRACT(MINUTE FROM TIMESTAMP2))*60 --分
(EXTRACT(SECOND FROM TIMESTAMP1) - EXTRACT(SECOND FROM TIMESTAMP2)) --秒
;
day_of_week,day_of_month,day_of_year,quarter_of_year
结语:个人工作中整理归纳的日期操作,欢迎留言指证和补充。