大数据中台-SQL常用时间函数
Hive
select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') from_unixtime(unix_timestamp()-432000,'yyyy-MM-dd hh:mm:ss') 5 天 date_format(current_timestamp(),'yyyyMMdd'); --推荐使用 select unix_timestamp('2011-12-07 13:01:03') from dual; select unix_timestamp('20111207 13:01:03','yyyyMMdd HH:mm:ss') from dual; 日期增加函数: date_add语法: date_add(string startdate, int days) 日期减少函数: date_sub语法: date_sub (string startdate, int days) select date_sub('2012-12-08',10) from dual; 日期比较函数: datediff语法: datediff(string enddate, string startdate) impala中 select from_unixtime(BIGINT,'yyyy-MM-dd HH:mm:ss'), 需要北京时间,如BIGINT: 1521559556, 转化后的不是北京时间(与网上工具转化的结果不一样), 目前只能使用SELECT from_unixtime(cast((1421719219938 / 1000) as bigint)) as c,from_utc_timestamp(from_unixtime(cast((1421719219938 / 1000) as bigint)), 'HKT') --时间转换成UTC+8时区
GP
now(),current_day(), timestamp('2011-07-20') timestamp('2011-07-20 00:00:00' ) to_date('20110720','yyyymmdd') to_timestamp(1342222222) to_char(now(),'yyyymmdd') to_char(now(),'yyyy-mm-dd') to_char(now(),'hh:mm:ss') to_char(now(),'ww') now() + interval '1 day' + interval '3 month + interval '2 hour' extract(week from now())
mysql
unix_timestamp(), unix_timestamp(date), from_unixtime(unix_timestamp), from_unixtime(unix_timestamp,format) current_timestamp() date_format(date,format) time_format(time,format) date_format('2008-08-08 22:23:01', '%Y%m%d%H%i%s') str_to_date('08/09/2008', '%m/%d/%Y') select to_days('0000-00-00'); -- 0select to_days('2008-08-08'); -- 733627 from_unixtime(1218290027); -- '2008-08-09 21:53:47' from_unixtime(1218169800, '%Y %D %M %h:%i:%s %x') date_add(@dt, interval -1 day); -- sub 1 day date_add(@dt, interval '01:15:30' hour_second); unix_timestamp('2008-08-08 12:30:00'); -- 1218169800 convert_tz('2008-08-08 12:00:00', '+08:00', '+00:00'); -- 2008-08-08 04:00:00
Oracle
sysdate+(5/24/60/60) 在系统时间基础上延迟5秒 sysdate+5/24/60 在系统时间基础上延迟5分钟 sysdate+5/24 在系统时间基础上延迟5小时 sysdate+5 在系统时间基础上延迟5天 add_months(sysdate,-5) 在系统时间基础上延迟5月 add_months(sysdate,-5*12) 在系统时间基础上延迟5年 上月末的日期:select last_day(add_months(sysdate, -1)) from dual; 本月的最后一秒:select trunc(add_months(sysdate,1),'MM') - 1/24/60/60 from dual 本周星期一的日期:select trunc(sysdate,'day')+1 from dual 年初至今的天数:select ceil(sysdate - trunc(sysdate, 'year')) from dual; 今天是今年的第几周 :select to_char(sysdate,'fmww') from dual 今天是本月的第几周:SELECT TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1 AS "weekOfMon" FROM dual select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual; to_char(SYSDATE,'yyyymmddhh24miss'); 从Unix时间戳记转换为Oracle时间: create or replace function unix_to_oracle(in_number NUMBER) return date is begin return(TO_DATE('19700101','yyyymmdd') + in_number/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24); end unix_to_oracle; 由Oracle时间Date型转换为Unix时间戳记: create or replace function oracle_to_unix(in_date IN DATE) return number is begin return( (in_date -TO_DATE('19700101','yyyymmdd'))*86400 - TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))*3600); end oracle_to_unix;
SQL server
getdate() --获取当前系统时间 datename(datepart,date_expr) --指定日期字符串中指定时间段的字符串格式 datepart(datepart,date_expr) --获取指定日期部分的整数形式 datediff(datepart,date_expr1.dateexpr2) --两个时间段中指定的间隔部分 dateadd(datepart,number,date_expr) --将指定的数值添加到指定的日期段后 select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:00.000 SELECT DATEPART(month, '2004-10-15') --返回 10 SELECT datename(weekday, '2004-10-15') --返回:星期五 select 当前日期=convert(varchar(10),getdate(),120), select 当前时间=convert(varchar(8),getdate(),114), select 本年第多少周=datename(week,'2004-10-15'), select 今天是周几=datename(weekday,'2004-10-15') Select CONVERT(varchar(100), GETDATE(), 0)-- 05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE(), 1)-- 05/16/06 Select CONVERT(varchar(100), GETDATE(), 2)-- 06.05.16 Select CONVERT(varchar(100), GETDATE(), 3)-- 16/05/06 Select CONVERT(varchar(100), GETDATE(), 4)-- 16.05.06 Select CONVERT(varchar(100), GETDATE(), 5)-- 16-05-06 Select CONVERT(varchar(100), GETDATE(), 6)-- 16 05 06 Select CONVERT(varchar(100), GETDATE(), 7)-- 05 16, 06 Select CONVERT(varchar(100), GETDATE(), 8)-- 10:57:46 Select CONVERT(varchar(100), GETDATE(), 9)-- 05 16 2006 10:57:46:827AM Select CONVERT(varchar(100), GETDATE(), 10)-- 05-16-06 Select CONVERT(varchar(100), GETDATE(), 11)-- 06/05/16 Select CONVERT(varchar(100), GETDATE(), 12)-- 060516 Select CONVERT(varchar(100), GETDATE(), 13)-- 16 05 2006 10:57:46:937 Select CONVERT(varchar(100), GETDATE(), 14)-- 10:57:46:967 Select CONVERT(varchar(100), GETDATE(), 20)-- 2006-05-16 10:57:47 Select CONVERT(varchar(100), GETDATE(), 21)-- 2006-05-16 10:57:47.157 Select CONVERT(varchar(100), GETDATE(), 22)-- 05/16/06 10:57:47 AM Select CONVERT(varchar(100), GETDATE(), 23)-- 2006-05-16 Select CONVERT(varchar(100), GETDATE(), 24)-- 10:57:47 Select CONVERT(varchar(100), GETDATE(), 25)-- 2006-05-16 10:57:47.250 Select CONVERT(varchar(100), GETDATE(), 100)-- 05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE(), 101)-- 05/16/2006 Select CONVERT(varchar(100), GETDATE(), 102)-- 2006.05.16 Select CONVERT(varchar(100), GETDATE(), 103)-- 16/05/2006 Select CONVERT(varchar(100), GETDATE(), 104)-- 16.05.2006 Select CONVERT(varchar(100), GETDATE(), 105)-- 16-05-2006 Select CONVERT(varchar(100), GETDATE(), 106)-- 16 05 2006 Select CONVERT(varchar(100), GETDATE(), 107)-- 05 16, 2006 Select CONVERT(varchar(100), GETDATE(), 108)-- 10:57:49 Select CONVERT(varchar(100), GETDATE(), 109)-- 05 16 2006 10:57:49:437AM Select CONVERT(varchar(100), GETDATE(), 110)-- 05-16-2006 Select CONVERT(varchar(100), GETDATE(), 111)-- 2006/05/16 Select CONVERT(varchar(100), GETDATE(), 112)-- 20060516 Select CONVERT(varchar(100), GETDATE(), 113)-- 16 05 2006 10:57:49:513 Select CONVERT(varchar(100), GETDATE(), 114)-- 10:57:49:547 Select CONVERT(varchar(100), GETDATE(), 120)-- 2006-05-16 10:57:49 Select CONVERT(varchar(100), GETDATE(), 121)-- 2006-05-16 10:57:49.700 Select CONVERT(varchar(100), GETDATE(), 126)-- 2006-05-16T10:57:49.827 Select CONVERT(varchar(100), GETDATE(), 130)-- 18 ???? ?????? 1427 10:57:49:907AM Select CONVERT(varchar(100), GETDATE(), 131)-- 18/04/1427 10:57:49:920AM
huidaoli版权所有:转载请注明出处,谢谢合作!

浙公网安备 33010602011771号