odps sql 日期函数处理

2022-07-20 09:45:17

在这里插入图片描述

日期处理

to_date

  • 命令格式:
    to_date(string, format)
  • 用途:
    将一个字符串按照format指定的格式转成日期值。
 SELECT  to_date('20200401','yyyymmdd');
> 2020-04-01 00:00:00

to_char

  • 命令格式:
    to_char(datetime, format)
  • 用途:
    日期类型按照format指定的格式转成字符串
select TO_CHAR(TO_DATE('20200401','yyyymmdd'),'yyyy-mm-dd');
>2020-04-01
select TO_CHAR('2020-04-01 20:20:20','yyyy-mm-dd');
>2020-04-01
select TO_CHAR('2020-04-01 20:20:20','yyyymmdd');
>20200401
select TO_CHAR('2020-04-01 20:20:20','yyyy-mm-dd hh');
>2020-04-01 20
select TO_CHAR('2020-04-01 20:20:20','yyyymmddhh');
>2020040120
select TO_CHAR('2020-04-01 20:20:20','hh');
>20

datepart

  • 命令格式:
    datepart(datetime, part)
  • 用途:
    提取日期中part指定的部分
  • 参数说明:
    ● datetime: datetime类型,日期值,若输入为string类型会隐式转换为datetime类型后参与运算,其它类型抛异常。
    ● part:string类型常量。支持的pattern包括yyyy、mm、dd、hh、mi、ss,此外也支持扩展的日期格式, 年-“year”, 月-“month”或”mon”, 日-“day”, 小时-“hour”。。不支持的pattern或其它类型会抛异常。
  • 返回值:
    返回值类型为bigint.若任一输入参数为NULL,返回NULL。
select datepart('2020-04-01 20:20:20','yyyy');
>2020
select datepart('2020-04-01 20:20:20','mm');
>4
select datepart('2020-04-01 20:20:20','mi');
>20

时间戳与日期转换

  • 定义
    时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数。

日期转时间戳

  • 命令格式:
    unix_timestamp(datetime)
  • 用途:
    日期转化为整型的unix格式的日期时间值
  • 参数说明:
    ● datetime: datetime类型日期值,若输入为string类型会隐式转换为datetime类型后参与运算,其它类型抛异常。
  • 返回值:
    整型unix格式日期值, datetime为NULL时返回NULL
## 日期转化为时间戳 ##
select unix_timestamp('2020-04-01 20:20:20');
> 1585743620
select unix_timestamp('2020-04-01 00:00:00');
>1585670400
SELECT  unix_timestamp(to_date('20200401','yyyymmdd'));
>1585670400

时间戳转化为日期

  • 命令格式:
    from_unixtime(unixtime)
  • 用途:
    将数字型的unix 时间日期值转为DE日期值
select from_unixtime (1585743620) 
>2020-04-01 20:20:20

日期计算函数

dateadd

  • 命令格式:
    dateadd(datetime, delta, datepart)
  • 用途:
    按照指定的单位和幅度修改datetime的值
SELECT  DATEADD('2020-04-01 20:20:20',1,'dd');
>2020-04-02 20:20:20
SELECT  DATEADD('2020-04-01 20:20:20',1,'dd');
>2020-03-31 20:20:20

对年修改 yyyy
对月修改 mm
对天修改 dd
对小时修改 hh
对分钟修改 mi
对秒修改 ss

datediff

命令格式:
datediff(endtime, starttime, datepart)
用途:
计算两个时间的差值,并转换成指定的单位,如:秒。

若start = ‘2005-12-31 23:59:59’, end = ‘2006-01-01 00:00:00’: 
select datediff(end, start, 'dd') = 1 
select  datediff(end, start, 'mm') = 1 
select  datediff(end, start, 'yyyy') = 1 
select  datediff(end, start, 'hh') = 1 
select  datediff(end, start, 'mi') = 1 
select  datediff(end, start, 'ss') = 1

datetrunc

  • 命令格式:
    datetrunc (datetime,format)
  • 用途:
    返回截取后的日期值。
 select datetrunc("2011-12-07 16:28:46", "yyyy")
 > "2011-01-01 00:00:00" 
select   datetrunc("2011-12-07 16:28:46", "month")
>"2011-12-01 00:00:00" 
select   datetrunc("2011-12-07 16:28:46", "dd")
> "2011-12-07 00:00:00"
select   datetrunc("2011-12-07 16:28:46", "hh");
>2011-12-07 16:00:00
select   datetrunc("2011-12-07 16:28:46", "mi");
>2011-12-07 16:28
select   datetrunc("2011-12-07 16:28:46", "ss");
>2011-12-07 16:28:46
  • 作者:数据会说话
  • 原文链接:https://blog.csdn.net/xjh163/article/details/103653127
    更新时间:2022-07-20 09:45:17