Flink基础(57):FLINK-SQL函数(20) 内置函数(15)日期函数(二)


  •  TO_DATE

语法

Date TO_DATE(INT time)
Date TO_DATE(VARCHAR date)
Date TO_DATE(VARCHAR date,VARCHAR format)

入参

 
参数数据类型
time INT   说明 表示从1970-1-1到所表示时间之间天数。
date VARCHAR   说明 默认格式为yyyy-MM-dd。
format VARCHAR

功能描述

将INT类型的日期或者VARCHAR类型的日期转换成DATE类型。

示例

  • 测试数据
     
    date1(INT)date2(VARCHAR)date3(VARCHAR)
    100 2017-09-15 20170915
  • 测试语句  
    SELECT TO_DATE(date1) as var1,
     TO_DATE(date2) as var2,
     TO_DATE(date3,'yyyyMMdd') as var3
    FROM T1;
  • 测试结果
     
    var1(DATE)var2(DATE)var3(DATE)
    1970-04-11 2017-09-15 2017-09-15
  •  FROM_UNIXTIME

语法

 
VARCHAR FROM_UNIXTIME(BIGINT unixtime[, VARCHAR format])

入参

 
参数数据类型
unixtime BIGINT
format VARCHAR
  说明
  • 参数unixtime为长整型,是以秒为单位的时间戳。
  • 参数format可选,为日期格式,默认格式为yyyy-MM-dd HH:mm:ss,表示返回VARCHAR类型的符合指定格式的日期,如果有参数为null或解析错误,则返回null。

功能描述

返回值为VARCHAR类型的日期值,默认日期格式:yyyy-MM-dd HH:mm:ss,若指定日期格式按指定格式输出任一输入参数是NULL,返回NULL。

示例

  • 测试数据
     
    unixtime1(BIGINT)nullstr(VARCHAR)
    1505404800 null
  • 测试语句  
    SELECT FROM_UNIXTIME(unixtime1) as var1, 
     FROM_UNIXTIME(unixtime1,'MMdd-yyyy') as var2,
     FROM_UNIXTIME(unixtime1,nullstr) as var3
    FROM T1;               
  • 测试结果
     
    var1(VARCHAR)var2(VARCHAR)var3(VARCHAR)
    2017-09-15 00:00:00 0915-2017 null
  •  DATEDIFF

语法

INT DATEDIFF(VARCHAR enddate, VARCHAR startdate)
INT DATEDIFF(TIMESTAMP enddate, VARCHAR startdate)
INT DATEDIFF(VARCHAR enddate, TIMESTAMP startdate)
INT DATEDIFF(TIMESTAMP enddate, TIMESTAMP startdate)

入参

 
参数数据类型
startdate TIMESTAMP或VARCHAR
enddate TIMESTAMP或VARCHAR
  说明 VARCHAR日期格式:yyyy-MM-dd或yyyy-MM-dd HH:mm:ss。

功能描述

计算从enddate到startdate两个时间的天数差值,返回整数。若有参数为NULL或解析错误,返回NULL。

示例

  • 测试数据
     
    datetime1(VARCHAR)datetime2(VARCHAR)nullstr(VARCHAR)
    2017-10-15 00:00:00 2017-09-15 00:00:00 null
  • 测试语句  
    SELECT  DATEDIFF(datetime1, datetime2) as int1, 
            DATEDIFF(TIMESTAMP '2017-10-15 23:00:00',datetime2) as int2, 
            DATEDIFF(datetime2,TIMESTAMP '2017-10-15 23:00:00') as int3, 
            DATEDIFF(datetime2,nullstr) as int4, 
            DATEDIFF(nullstr,TIMESTAMP '2017-10-15 23:00:00') as int5, 
            DATEDIFF(nullstr,datetime2) as int6, 
            DATEDIFF(TIMESTAMP '2017-10-15 23:00:00',TIMESTAMP '2017-9-15 00:00:00')as int7
    FROM T1;
  • 测试结果
     
    int1(INT)int2(INT)int3(INT)int4(INT)int5(INT)int6(INT)int7(INT)
    30 31 -31 null null null 31
  •  DATE_SUB

语法

 
VARCHAR DATE_SUB(VARCHAR startdate, INT days)
VARCHAR DATE_SUB(TIMESTAMP time, INT days)

入参

 
参数数据类型
startdate VARCHAR   说明 VARCHAR类型日期格式:yyyy-MM-dd或yyyy-MM-dd HH:mm:ss。
time TIMESTAMP
days INT

功能描述

返回startdate减去days天数的日期。返回VARCHAR类型的yyyy-MM-dd日期格式。如果有参数为null或解析错误,返回null。

示例

  • 测试数据
     
    date1(VARCHAR)nullstr(VARCHAR)
    2017-10-15 null
  • 测试语句  
    SELECT DATE_SUB(date1, 30) as var1,
     DATE_SUB(TIMESTAMP '2017-10-15 23:00:00',30) as var2,
     DATE_SUB(nullstr,30) as var3
    FROM T1;
  • 测试结果
     
    var1(VARCHAR)var2(VARCHAR)var3(VARCHAR)
    2017-09-15 2017-09-15 null
  •  DATE_ADD

语法

 
VARCHAR DATE_ADD(VARCHAR startdate, INT days)
VARCHAR DATE_ADD(TIMESTAMP time, INT days)

入参

 
参数数据类型
startdate TIMESTAMP或VARCHAR   说明 VARCHAR类型日期格式:yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss。
enddate TIMESTAMP
days INT

功能描述

返回指定startdate日期days天数后的VARCHAR类型日期,返回string格式的日期为yyyy-MM-dd。如果有参数为null或解析错误,返回null。

示例

  • 测试数据
     
    datetime1(VATCHAR)nullstr(VATCHAR)
    2017-09-15 00:00:00 null
  • 测试语句  
    SELECT DATE_ADD(datetime1, 30) as var1,
     DATE_ADD(TIMESTAMP '2017-09-15 23:00:00',30) as var2,
     DATE_ADD(nullstr,30) as var3
    FROM T1;   
  • 测试结果
     
    var1(VARCHAR)var2(VARCHAR)var3(VARCHAR)
    2017-10-15 2017-10-15 null

相关