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