Teradata日期操作

常用函数


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 函数 (已对对大小月做了优化)

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'  

EXCEPT 函数

EXTRACT( YEAR FROM CURRENT_DATE)  --获取日期中的年份(返回int类型)
EXTRACT( MONTH FROM CURRENT_DATE) --获取月份
EXTRACT( DAY FROM CURRENT_DATE)   --获取T天 

TRUNC 函数

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,'猪')

时间间隔 (最大间隔数值为100,如间隔秒数超过100则会报异常)

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)) --秒  
;

TeraData由系统日期

day_of_week,day_of_month,day_of_year,quarter_of_year 

结语:个人工作中整理归纳的日期操作,欢迎留言指证和补充。

你可能感兴趣的:(TeraData)