oraclemysqlhive ⽇期时间格式转换及常⽤计算⽅法对⽐总结
因为笔者最近写sql徘徊在mysql、oracle、hive之中,有些函数容易搞混。因此在这⾥作个简单的总结,加深⼀下⾃⼰的印象,避免每次都要百度⼀下。
⼀、获取系统时间
sql语句
结果
oracle
sql 日期只取年月
select sysdate from dual;
mysql
select now(), sysdate(), current_date(), current_time(),
current_timestamp();
hive
select current_date(), current_timestamp();
总结:
oracle⾥有1种⽅法:
1)sysdate关键字,注意这不是⼀个函数,因此不能加括号。返回的是完整⽇期时间格式。mysql有5种⽅法:
1) now(),返回完整⽇期时间格式
2)也可以⽤sysdate(),但是mysql⾥的sysdate是函数,因此使⽤时需要加括号,返回完整⽇期时间mysql语句转oracle
格式。3)current_date(),只返回⽇期4)current_time(), 只返回时间
5)current_timestamp(),返回完整⽇期时间格式hive有2种⽅法,且与mysql 相同:1)current_date(),只返回⽇期
2)current_timestamp(),返回完整⽇期时间格式
⼆、时间格式转换
oracle时间格式转换函数主要是to_char(), to_date mysql时间格式转换函数是date_formate(),str_to_date()hive时间格式转换函数是from_unixtime(), unix_timestamp.下表列出了oracle/mysql/hive的时间格式转化的相关函数。
函数
oracle to_char(⽇期,想要的格式),返回字符串,若要获取英⽂⽉份或星期名加上'nls_date_language=American'
to_date(字符串,字符串的格式),返回⽇期
mysql date_format(⽇期/⽇期格式的字符串,想要的格式),返回字符串str_to_date(字符串,字符串的格式),返回⽇期
hive from_unixtime(unix时间戳,[想要的格式]),返回⽇期字符串,格式参数默认值yyyy-MM-dd HH:mm:ss
unix_timestamp(⽇期字符串, [字符串的格式]),返回unix时间戳。格式参数默认值yyyy-MM-dd HH:mm:ssthis怎么读的英文
注意:hive⽇期都是字符串的类型('yyyy-MM-dd HH:mm:ss'),因此转换时要借助unix时间戳。如果要将⼀种⽇期字符串转换成另⼀种格式的⽇期字符串,需要⽤:
from_unixtime(unix_timestamp(⽇期字符串,该⽇期的格式),  想要的格式)。
oracle,mysql,hive的格式⽀持类型见下表:
年的周ww两位,当年第⼏周,48%U
%u 周 (00-53) 星期⽇是⼀周的第⼀天周 (00-53) 星期⼀是⼀周的第⼀天
⽉的周w⼀位,当⽉第⼏周,4
三、获取年/⽉/⽇/时/分/秒/星期/周/季度
获取年/⽉/⽇/时/分/秒/周/季度,有两种⽅法:
1)通过上⾯所讲的格式转换⽅法,指定相应的格式。
2)⽤sql⾃带函数提取:extract(要提取的单位 from ⽇期)。不过只⽀持提取年/⽉/⽇。
oracle mysql hive
oracle to_char(⽇期,要提取的单位格式)
extract(要提取的单位 from ⽇期),
只⽀持day/month/year
day(⽇期)
mysql date_format(⽇期, 要提取的单位格
式)
day(⽇期)
month(⽇期)
year(⽇期)
time(⽇期)
week(⽇期) weekofyear(⽇期)
weekofmonth(⽇期)
quarter(⽇期)
ldapsearch使用month(⽇
期)
hive from_unixtime(unix_timestamp(⽇
期字符串), 要提取的单位格式)
day(⽇期字符串)
month(⽇期字符串)
year(⽇期字符串)
hour(⽇期字符串)
minute(⽇期字符串)
second(⽇期字符串)
weekofyea(⽇期字符串)
month(⽇
期)
oracle mysql hive
⽇to_char(⽇期,'dd')
extract (day from ⽇期)
date_format(⽇期, %d)
day(⽇期)
from_unixtime(unix_timestamp(⽇期字符串), 'dd')
date_format(⽇期字符串, 'dd')
day(⽇期字符串)
⽉to_char(⽇期,'mm')
extract(month from ⽇期)
date_format(⽇期, %m)
month(⽇期)
from_unixtime(unix_timestamp(⽇期字符串), 'MM')
date_format(⽇期字符串, 'MM')
month(⽇期字符串)
年to_char(⽇期,'yyyy')
extract(year from ⽇期)date_format(⽇期, %Y)
year(⽇期)
from_unixtime(unix_timestamp(⽇期字符串), 'yyyy')
date_format(⽇期字符串, 'yyyy')
year(⽇期字符串)
时to_char(⽇期,'hh24')date_format(⽇期, %H)from_unixtime(unix_timestamp(⽇期字符串), 'HH') date_format(⽇期字符串, 'HH')
hour(⽇期字符串)
分to_char(⽇期,'mi')date_format(⽇期, %i)from_unixtime(unix_timestamp(⽇期字符串), 'mm') date_format(⽇期字符串, 'mm')
minute(⽇期字符串)
秒to_char(⽇期,'ss')date_format(⽇期, %s)from_unixtime(unix_timestamp(⽇期字符串), 'ss') date_format(⽇期字符串, 'ss')
second(⽇期字符串)
星期to_char(⽇期,'day')date_format(⽇期, %W)
年的周to_char(⽇期,'ww')date_format(⽇期, %U)
weekofyear(⽇期),week(⽇
期), yearweek(⽇期)
weekofyear(⽇期)
⽉的周to_char(⽇期,'w')weekofmonth(⽇期)
季度to_char(⽇期,'q')quarter(⽇期)
oracle sql结果⽇
select to_char(to_date('2019-11-22 14:02:36'), 'dd') from dual; -- ⽅法1
select extract(day from to_date('2019-11-22 14:02:36')) from dual; -- ⽅法2
22
⽉select to_char(to_date('2019-11-22 14:02:36'), 'mm') from dual; -- ⽅法1
select extract(month from to_date('2019-11-22 14:02:36')) from dual; -- ⽅法211
年select to_char(to_date('2019-11-22 14:02:36'), 'dddd') from dual;-- ⽅法1
select extract(year from to_date('2019-11-22 14:02:36')) from dual;-- ⽅法2
scratch中文版下载培训班白名单2019
时select to_char(to_date('2019-11-22 14:02:36'), 'hh24') from dual;-- ⽅法1
14
分select to_char(to_date('2019-11-22 14:02:36'), 'mi') from dual;-- ⽅法1
02
秒select to_char(to_date('2019-11-22 14:02:36'), 'ss') from dual;-- ⽅法1
36
星期select to_char(to_date('2019-11-22 14:02:36'), 'day') from dual;-- ⽅法1
星期五
年的周select to_char(to_date('2019-11-22 14:02:36'), 'ww') from dual;-- ⽅法1
47
⽉的周select to_char(to_date('2019-11-22 14:02:36'), 'w') from dual;-- ⽅法1
4
季度select to_char(to_date('2019-11-22 14:02:36'), 'q') from dual;-- ⽅法1
4
四、求时间间隔
求时间间隔可分为两种:
1)精确时间间隔:例如计算年龄时的周岁,不满⼀年的需要舍去。
2)虚时间间隔:我暂且按照虚岁的概念来叫这种⼊位时间隔叫虚时间间隔。
3.1 精确时间间隔
oracle: 直接⽇期相减,得到两个⽇期的间隔天数(⾮整型)。实际是两个⽇期的间隔秒数/86400。
oracle
天数floor((date2-date1))
⽉份数
年数
周数
季度数
⼩时数
分钟数
秒数

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。