时间函数(Hive-Sql\Mysql\Presto)

特殊说明:
1、时间函数有多种方法,比如本月第一天(T-1):mon_firstday(sysdate(-1))或者concat(substr(sysdate(-1), 1, 8), ‘01’)等。
2、通常离线数据是T-1,故取数据时候,月至今的范围是1号至昨天,故本业会标注T-1,请知晓。
3、看函数产生的效果:
(1)Hive-Sql如果想看函数的效果,可以在集市输入 select + 函数。例如 select sysdate()
在oracle中,可以输入 select sysdate() from dual,hive sql中没有dual,但是可以直接 select sysdate() 这样写,不需要from dual,本页最下面样例。
dual是什么?Oracle提供的最小的工作表,只有一行一列,具有某些特殊功用。
(2)关系型数据库可以这么查:select+函数 或 select 函数 from dual;
select DATE_SUB(curdate(), INTERVAL 1 DAY) from dual ;
或 select DATE_SUB(curdate(), INTERVAL 1 DAY);
(3)Presto:同上
select cast(current_date - interval ‘1’ day as varchar) from dual;
select cast(current_date - interval ‘1’ day as varchar) ;

日期 Hive-sql Mysql Presto
昨日 sysdate(-1) DATE_SUB(curdate(), INTERVAL 1 DAY) dt = cast(current_date - interval ‘1’ day as varchar)
月至今(T-1) dt >= concat(substr(sysdate(-1), 1, 8), ‘01’) and dt < sysdate() dt >= concat(substr(DATE_SUB(curdate(), INTERVAL 1 DAY), 1, 8), ‘01’) and dt< curdate() month = concat(substr(cast(current_date - interval ‘1’ day as varchar), 1, 7), ‘-01’)或
dt>=concat(substr(cast(current_date - interval ‘1’ day as varchar), 1, 7), ‘-01’) and dt < current_date
去年月至今(T-1) dt >= add_months(concat(substr(sysdate(-1), 1, 8), ‘01’), -12)and dt < add_months(sysdate(), -12) dt >= DATE_SUB(concat(substr(DATE_SUB(curdate(), INTERVAL 1 DAY), 1, 8), ‘01’), INTERVAL 1 year) and dt< DATE_SUB(curdate(), INTERVAL 1 year) dt >= concat(SUBSTR(CAST((CURRENT_DATE - interval ‘1’ DAY) - interval '1’YEAR AS VARCHAR), 1, 7), ‘-01’)
and dt < CAST((CURRENT_DATE - interval ‘1’ YEAR) AS VARCHAR)
本月1号(T-1) concat(substr(sysdate(-1), 1, 8), ‘01’) concat(substr(DATE_SUB(curdate(), INTERVAL 1 DAY), 1, 8), ‘01’) concat(substr(cast(current_date - interval ‘1’ day as varchar), 1, 7), ‘-01’)
总结 1、遇到去年,用add_months(XXX,-12) 1、遇到去年,用DATE_SUB(XXX,INTERVAL 1 year) 1、遇到去年,用(XXX - interval ‘1’ year )

求星期、周等时间函数(星期几,第几周)

功能 Hive-Sql 语句示范
第几周(T) weekofyear(sysdate()) select weekofyear(sysdate())
第几周(T) weekofyear(sysdate()) weekofyear(sysdate())
求对应月份的天数(T) day(last_day(sysdate())) select day(last_day(sysdate()))
本季度第一天:select add_months(concat(year(sysdate(-1)), ‘-’, substr(concat(‘0’, quarter(sysdate(-1)) * 3 + 1), - 2), ‘-01’), - 3),测试一下:select add_months(concat(year(‘2018-12-05’), ‘-’, substr(concat(‘0’, quarter(‘2018-12-05’) * 3 + 1), - 2), ‘-01’), - 3)

你可能感兴趣的:(mysql,hive,sql,mysql)