联 系 我 们
售前咨询
售后咨询
微信关注:星环科技服务号
更多联系方式 >
6.6.7 日期函数
更新时间:9/16/2022, 3:03:11 AM

参数名 功能描述 默认值

inceptor.udf.v2.enabled

控制一些日期函数的新功能是否启用。为true时,表示启用新功能。具体的新功能请参考函数的详细信息。

false

inceptor.date.show.time

用于在*inceptor.udf.v2.enabled*开关开启时,控制日期类型的返回值是否显示时间部分。为false时,不显示日期类型的时间部分。此参数只可在hive_site.xml文件中修改

true

inceptor.support.english.date.format

控制在日期函数中是否默认支持英文日期格式(即“dd-MMM-yy”、“dd-MMM-yy HH:mm:ss”、“dd-MMM-yyyy”、“dd-MMM-yyyy HH:mm:ss”、“yyyyMMdd”、“yyyyMMdd HH:mm:ss”)作为合法输入,为true时表示支持。在inceptor.udf.v2.enabled开关开启时,系统支持英文日期格式作为合法输入,忽略此参数设置。

true

ADD_MONTHS

函数名 返回类型 描述

ADD_MONTHS(<date>,<num_months>)

默认为STRING;

inceptor.udf.v2.enabled 开关开启时,返回DATE。

返回 <date> 加上 <num_months> 个月后的日期或时间。

说明

参数date应该是datetime value, 或者可以隐性转换成DATE类型;支持含有毫秒的日期STRING作为输入,如'2018-07-31 12:12:12.111'。默认情况下,参数num_months必须是INT类型或者可以隐式转化为INT的类型。

inceptor.udf.v2.enabled开关开启时:

  • 返回结果默认包含不为零的时间部分。如要不显示时间部分,需要在hive_site.xml文件中设置inceptor.date.show.time为false;

  • 输入值中的毫秒级数会被保存在返回的DATE类型结果中,可以通过CAST AS TIMESTAMP提取;

  • 参数date值超出合法日期范围时会返回NULL;

  • 参数num_months支持所有数字类型和可以转化为INT的String类型。

此外,inceptor.udf.v2.enabled和*inceptor.support.english.date.format*中有一个为true时,参数date支持英文日期格式作为合法输入格式。

举例

SELECT ADD_MONTHS('201501',1) AS result FROM system.dual LIMIT 1;
复制
result

201502

SET inceptor.udf.v2.enabled=true;
SELECT ADD_MONTHS('31-JUL-18 12:12:12.111',1) AS result FROM system.dual LIMIT 1;
复制
result

2018-08-31 12:12:12

EXTRACT

函数名 返回类型 描述

EXTRACT(DAY|MONTH|YEAR FROM <date>)

STRING

抽取日期类型中的年/月/日

说明

参数date应该是datetime value,或者可以隐性转换成DATE类型。

举例

SELECT EXTRACT(YEAR FROM '2015-01-15') AS result FROM system.dual LIMIT 1;
复制
result

2015

TO_UNIX_TIMESTAMP

函数名 返回类型 描述

TO_UNIX_TIMESTAMP(<date>[, <pattern>])

BIGINT

把日期格式转化为UNIX时间戳

说明

  • 返回从 '1970-01-01 8:00:00' 开始,到指定时间为止的秒数。参数一最好是date类型,也支持其他字符类型;

  • 参数二可选,作用是指定参数一的格式,如 'yyyy-MM-dd HH:mm:ss',如果参数二指定的格式和参数一不匹配,则返回 NULL

举例

SELECT TO_UNIX_TIMESTAMP("2015-01-15",'yyyy-MM-dd') AS result FROM system.dual LIMIT 1;
复制
result

1421251200

UNIX_TIMESTAMP

函数名 返回类型 描述

UNIX_TIMESTAMP([<date>[, <pattern>]])

BIGINT

把日期格式转化为UNIX时间戳

说明

返回从 "1970-01-01 8:00:00" 开始,到指定时间为止的秒数。如果不加参数,则返回当前系统时间的UNIX时间戳。参数一最好是DATE类型,也支持其他字符类型; 参数二可选,作用是指定参数一的格式,如 'yyyy-MM-dd HH:mm:ss',如果参数二指定的格式和参数一不匹配,则返回NULL。

举例

SELECT UNIX_TIMESTAMP("2015-01-15",'yyyy-MM-dd') AS result FROM system.dual LIMIT 1;
复制
result

1421251200

TO_TIMESTAMP

函数名 返回类型 描述

TO_TIMESTAMP([<date>[, <pattern>]])

BIGINT

把日期格式转化为UNIX时间戳

说明

UNIX_TIMESTAMP用法完全一致

举例

SELECT TO_TIMESTAMP("2015-01-15",'yyyy-MM-dd') AS result FROM system.dual LIMIT 1;
复制
result

1421251200

FROM_UNIXTIME

函数名 返回类型 描述

FROM_UNIXTIME(<unix_time>[, <format>])

STRING

把UNIX时间戳转化为时间格式

说明

参数一是LONG类型,或者可以隐性转换成LONG类型的UNIX时间戳;参数二可选,是字符类型,指定了返回的时间格式。当没有参数二时,返回标准的 'yyyy-MM-dd HH:mm:ss' 时间格式。

举例

SELECT FROM_UNIXTIME(0, 'yyyy-MM-dd HH:mm:ss') AS result FROM system.dual LIMIT 1;
复制
result

1970-01-01 08:00:00

TO_CHAR

函数名 返回类型 描述

TO_CHAR(<date>[, <pattern>])

STRING

把日期<date>转化为指定格式<pattern>

说明

如果<date>是string类型,要求其格式必须为 yyyy-MM-dd HH:mm:ss 或者 yyyy-MM-dd。若<pattern>缺省,则以原形式返回。

举例

SELECT to_char('2011-05-11 10:00:12', 'yyyyMMdd') AS result FROM system.dual LIMIT 1;
复制
result

20110511

TO_DATE

函数名 返回类型 描述

TO_DATE(<date>[, <pattern>])

默认为STRING;

inceptor.udf.v2.enabled 开关开启时,返回DATE。

把字符串或者日期字符转化为 yyyy-MM-dd 的日期格式。

说明

参数date必须是字符类型或者是日期类型、TIMESTAMP类型,否则返回为NULL。支持含有毫秒的日期STRING作为输入,如'2018-07-31 12:12:12.111'。

inceptor.udf.v2.enabled开关开启时:

  • 返回结果默认包含不为零的时间部分。如要不显示时间部分,需要在hive_site.xml文件中设置inceptor.date.show.time为false;

  • 输入值中的毫秒级数会被保存在返回的DATE类型结果中,可以通过CAST AS TIMESTAMP提取;

  • 可以使用pattern参数指定输入的格式,如TO_DATE('23-JUL-2018','dd-MMM-yyyy');

  • 参数date值超出合法日期范围时会返回NULL。

此外,inceptor.udf.v2.enabledinceptor.support.english.date.format有一个为true时,参数date支持英文日期格式作为合法输入格式。

举例

SELECT TO_DATE('2015-01-15 04:17:52') AS result FROM system.dual LIMIT 1;
复制
result

2015-01-15

SET inceptor.udf.v2.enabled=true;
SELECT TO_DATE('23-JULY-18','dd-MMM-yy') AS result FROM system.dual LIMIT 1;
复制
result

2018-07-23

TDH_TODATE

函数名 返回类型 描述

TDH_TODATE(<date>[, <originalformat>,<targetformat>])

STRING

把字符按照给定的格式,转化为标准日期格式,或者指定格式

说明

参数date必须是字符类型或者是日期类型、TIMESTAMP类型,否则返回为 NULL。如果只提供日期一个参数,系统会自动识别 yyyyMMdd、yyyy-MM-dd、yyyy/MM/dd 格式的字符或日期,然后返回 yyyy-MM-dd 格式的字符串,其他返回 NULL

当指定了 originalformat (参数一的原始日期格式)时,会根据指定的格式去解析日期,如果格式和日期参数不匹配也返回 NULL,建议手动指定 originalformat

参数 targetformat 也是STRING类型,指定返回的日期格式,如 yyyy*MM*dd

三个参数 dateoriginalformattargetformat 都可以包含时分秒。但是 originalformattargetformat 缺省的情况下,tdh_todate 只返回 yyyy-MM-dd 格式的年月日。所以要转换包含时分秒信息的日期必须指定 original format 和*targetformat*。时分秒的格式为 HH:mm:ss.SS(24小时制)或者 hh:mm:ss.SS(12小时制)。

inceptor.udf.compatible.with.oracle 参数来控制兼容性。当此开关为 true 时,可以识别非法日期和英文日期,例如 TDH_TODATE("2018-02-31") 会返回 NULL,TDH_TODATE("25-MAR-18") 则会返回 "2018-03-25"。

举例

SELECT TDH_TODATE('2015-01-15 00:00:00') AS result FROM system.dual LIMIT 1;
复制
result

2015-01-15

SELECT TDH_TODATE('2015-11-24 18:00:00','yyyy-MM-dd HH:mm:ss','yyyy/MM/dd hh:mm:ss') AS result FROM system.dual LIMIT 1;
复制
result

2015/11/24 06:00:00

DAY

函数名 返回类型 描述

DAY(<date>)

INT

返回指定时间是该月的第几天

说明

参数date必须是字符类型或者是日期类型、Timestamp类型,否则返回为 NULL。另外date必须是 yyyy-MM-dd 或者 yyyy-MM-dd HH:MM:SS 的格式,否则也返回NULL。

举例

SELECT DAY('2015-01-15') AS result FROM system.dual LIMIT 1;
复制
result

15

DAYOFMONTH

函数名 返回类型 描述

DAYOFMONTH(<date>)

INT

返回指定时间是该月的第几天

说明

用法和函数DAY完全一致。

举例

SELECT DAYOFMONTH('2015-01-15') AS result FROM system.dual LIMIT 1;
复制
result

15

DAYOFYEAR

函数名 返回类型 描述

DAYOFYEAR(<date>[,<format>])

INT

返回指定日期是该年的第几天

说明

参数date必须是字符类型或者是日期类型、Timestamp类型,否则返回为NULL。如果只提供日期一个参数,系统会自动识别 yyyyMMddyyyy-MM-ddyyyy/MM/dd 三种格式的字符或日期,然后返回日期是该年的第几天,其他格式返回NULL。当指定了第二个可选参数(STRING类型的日期格式)时,会根据指定的格式去解析日期,如果格式和日期参数不匹配也返回NULL,建议手动指定第二个参数。

举例

SELECT DAYOFYEAR('2015|01|15','yyyy|MM|dd') AS result FROM system.dual LIMIT 1;
复制
result

15

QUARTER

函数名 返回类型 描述

QUARTER(<date>[,<format>])

INT

返回指定日期是该年的第几季度

说明

参数date必须是字符类型或者是日期类型、Timestamp类型,否则返回为NULL。如果只提供日期一个参数,系统会自动识别yyyyMMdd、yyyy-MM-dd、yyyy/MM/dd三种格式的字符或日期,然后返回日期是该年的第几季度,其他格式返回NULL。当指定了第二个可选参数(String类型的日期格式)时,会根据指定的格式去解析日期,如果格式和日期参数不匹配也返回NULL,建议手动指定第二个参数。

举例

SELECT QUARTER('2015|06|15','yyyy|MM|dd') AS result FROM system.dual LIMIT 1;
复制
result

2

HOUR

函数名 返回类型 描述

HOUR(<date>)

INT

返回指定时间是该日的第几个小时

说明

参数date必须是字符类型或者是日期类型、Timestamp类型,同时必须yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。

举例

SELECT HOUR('2015-01-30 22:58:59') AS result FROM system.dual LIMIT 1;
复制
result

22

MINUTE

函数名 返回类型 描述

MINUTE(<date>)

INT

返回指定时间是该小时的第多少分钟

说明

参数date必须是字符类型或者是日期类型、Timestamp类型,同时必须是yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。

举例

SELECT MINUTE('2015-01-30 22:58:59') AS result FROM system.dual LIMIT 1;
复制
result

58

SECOND

函数名 返回类型 描述

SECOND(<time>)

INT

返回指定时间是该分钟的第多少秒

说明

参数date必须必须是yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。

举例

SELECT SECOND('2015-01-30 22:58:59') AS result FROM system.dual LIMIT 1;
复制
result

59

WEEKOFYEAR

函数名 返回类型 描述

WEEKOFYEAR(<date>)

INT

返回指定日期是该年的第几周

说明

参数date必须是字符类型或者是日期类型、Timestamp类型,同时必须是是yyyy-MM-dd或者yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。我们把周一作为一周的开始,同时第一个有着4天及以上的周,是第一周。

举例

SELECT WEEKOFYEAR('2015-01-15 22:58:59') AS result FROM system.dual LIMIT 1;
复制
result

3

DATEDIFF

函数名 返回类型 描述

DATEDIFF(<date1>, <date2>)

INT

返回两个日期的相差天数

说明

参数 date1/date2 必须是字符类型或者是日期类型、Timestamp类型,同时必须是是yyyy-MM-dd或者yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。支持含有毫秒的日期STRING作为输入,如'2018-07-31 12:12:12.111'。返回值为正说明date1较晚。

inceptor.udf.v2.enabled开关开启时:

  • 输入值中的毫秒级数会被保存在返回的DATE类型结果中,可以通过CAST AS TIMESTAMP提取;

  • 输入值为非法日期时会返回NULL;

  • 日期中的时间部分也会进行计算,得出的结果不足一天的结果计为0天。

此外,inceptor.udf.v2.enabled和*inceptor.support.english.date.format*中有一个为true时,参数支持英文日期格式作为合法输入格式。

举例

SELECT DATEDIFF('2015-01-15', '2015-02-08') AS result FROM system.dual LIMIT 1;
复制
result

-24

SET inceptor.udf.v2.enabled=true;
SELECT DATEDIFF('30-JUL-18 12:12:12.111','20180731 12:12:10') AS result FROM system.dual LIMIT 1;
复制
result

0

DATE_ADD

函数名 返回类型 描述

DATE_ADD(<start_date>, <num_days>)

默认为STRING;

inceptor.udf.v2.enabled 开关开启时,返回DATE。

返回指定时间之后的第num_days天的日期或时间

说明

参数start_date必须是字符类型或者是日期类型、Timestamp类型,同时必须是yyyy-MM-dd或者yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。支持含有毫秒的日期STRING作为输入,如'2018-07-31 12:12:12.111'。默认情况下,参数num_days必须是Int类型或者可以隐式转化为Int的类型。

inceptor.udf.v2.enabled开关开启时:

  • 返回结果默认包含不为零的时间部分。如要不显示时间部分,需要在hive_site.xml文件中设置inceptor.date.show.time为false;

  • 输入值中的毫秒级数会被保存在返回的DATE类型结果中,可以通过CAST AS TIMESTAMP提取;

  • 参数start_date值超出合法日期范围时会返回NULL;

  • 参数num_days支持所有数字类型和可以转化为INT的String类型。

此外,inceptor.udf.v2.enabled和*inceptor.support.english.date.format*中有一个为true时,参数start_date支持英文日期格式作为合法输入格式。

举例

SELECT DATE_ADD('2015-01-15', 1) AS result FROM system.dual LIMIT 1;
复制
result

2015-01-16

SET inceptor.udf.v2.enabled=true;
SELECT DATE_ADD('2018-07-31 12:12:12.111',1) AS result FROM system.dual LIMIT 1;
复制
result

2018-08-01 12:12:12

DATE_SUB

函数名 返回类型 描述

DATE_SUB(<start_date>, <num_days>)

默认为STRING;

inceptor.udf.v2.enabled 开关开启时,返回DATE。

返回指定时间之前的第num_days天的时间

说明

参数start_date必须是字符类型或者是日期类型、Timestamp类型,同时必须是是yyyy-MM-dd或者yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。支持含有毫秒的日期STRING作为输入,如'2018-07-31 12:12:12.111'。默认情况下,参数num_days必须是Int类型或者可以隐式转化为Int的类型。

inceptor.udf.v2.enabled开关开启时:

  • 返回结果默认包含不为零的时间部分。如要不显示时间部分,需要在hive_site.xml文件中设置inceptor.date.show.time为false;

  • 输入值中的毫秒级数会被保存在返回的DATE类型结果中,可以通过CAST AS TIMESTAMP提取;

  • 参数start_date值超出合法日期范围时会返回NULL;

  • 参数num_days支持所有数字类型和可以转化为INT的String类型。

此外,inceptor.udf.v2.enabled和*inceptor.support.english.date.format*中有一个为true时,参数start_date支持英文日期格式作为合法输入格式。

举例

SELECT DATE_SUB('2015-01-15', 1) AS result FROM system.dual LIMIT 1;
复制
result

2015-01-14

SET inceptor.udf.v2.enabled=true;
SELECT DATE_SUB('2018-07-31 12:12:12.111',1) AS result FROM system.dual LIMIT 1;
复制
result

2018-07-30 12:12:12

DATE_FORMAT

函数名 返回类型 描述

DATE_FORMAT(<date>, <pattern>)

STRING

把时间转化为指定的格式

说明

参数date必须是’yyyy-MM-dd HH:mm:ss’的字符或者Date、Timestamp格式,否则返回值为NULL;参数二必须是字符格式,指定了返回日期的格式。

举例

SELECT DATE_FORMAT('2015-01-15 00:00:00','yyyyMMdd') AS result FROM system.dual LIMIT 1;
复制
result

20150115

STR_TO_DATE

函数名 返回类型 描述

STR_TO_DATE(<date>, <format>)

DATE

根据指定的格式来解析日期并转化为标准格式

说明

参数date必须是字符或者Date、Timestamp格式,否则返回值为NULL;参数二必须是字符格式,指定了dateText的日期格式。最后返回的是标准的 'yyyy-MM-dd' 格式的日期。

举例

SELECT STR_TO_DATE('2015|01|15','yyyy|MM|dd') AS result FROM system.dual LIMIT 1;
复制
result

2015-01-15

SYSDATE

函数名 返回类型 描述

SYSDATE

DATE

返回当前系统时间

说明

返回的时间是 'yyyy-MM-dd HH:mm:ss' 格式。注意使用时函数后没有括号。

举例

SELECT SYSDATE AS result FROM system.dual LIMIT 1;
复制
result

2018-09-10 19:54:23

DAYOFWEEK

函数 返回类型 描述

DAYOFWEEK(<date>)

INT

参数须是DATE类型,形式必须为:'yyyy-MM-dd HH:mm:ss' 或者 'yyyy-MM-dd'。返回日期在一周中是第几天(将周日算作第一天)。

SELECT DAYOFWEEK('2016-03-03') AS result FROM system.dual LIMIT 1;
复制
result

5

DAYOFWEEK_ISO

函数 返回类型 描述

DAYOFWEEK_ISO(<date>)

INT

参数须是DATE类型,形式必须为:'yyyy-MM-dd HH:mm:ss' 或者 'yyyy-MM-dd'。返回日期在一周中是第几天(将周一算作第一天)。

SELECT DAYOFWEEK_ISO('2016-03-03') AS result FROM system.dual LIMIT 1;
复制
result

4

MILLISECOND

函数 返回类型 描述

MILLISECOND(<date>)

INT

参数须是DATE类型,形式必须为 'yyyy-MM-dd HH:mm:ss.xxx' 或者 'HH:mm:ss.xxx'。返回参数中小数点后精确到毫秒的部分。小数点后最多能有三位数。

SELECT MILLISECOND('2009-07-30 12:58:59.847') AS result FROM system.dual LIMIT 1;
复制
result

847

SELECT MILLISECOND('12:58:59.213') AS result FROM system.dual LIMIT 1;
复制
result

213

MONTHS_BETWEEN

函数 返回类型 描述

MONTHS_BETWEEN (<end_date>, <start_date>)

DOUBLE

需要两个DATE类型的参数。返回以 <end_date> 结束,<start_date> 开始的一段时间中的月数。参数的形式必须为*'yyyyMM','yyyy-MM-dd HH:mm:ss'* 或者 'yyyy-MM-dd'。如果 <end_date><start_date> 之前,返回负值。

SELECT MONTHS_BETWEEN('2011-01-01','2010-10-15') AS result FROM system.dual LIMIT 1;
复制
result

2.5483871

SELECT MONTHS_BETWEEN('2010-10-15','2011-01-01') AS result FROM system.dual LIMIT 1;
复制
result

-2.5483871

LAST_DAY

函数 返回类型 描述

LAST_DAY(<date>)

DATE

必须有一个DATE类型的参数,参数形式必须为:yyyy-MM-dd HH:mm:ss, yyyy-MM-dd, 或者*yyyyMM*。返回参数所在月的最后一天的日期。

SELECT LAST_DAY('2003-03-15 01:22:33') AS result FROM system.dual LIMIT 1;
复制
result

2003-03-31

DAYS

函数 返回类型 描述

DAYS(<date>)

INT

需要一个DATE类型的参数 <date>,参数形式必须为 yyyy-MM-dd, yyyy-MM-dd HH:mm:ss 类型的日期。返回 <date>0001-01-02 之间的天数。

SELECT DAYS('2016-03-05') AS result FROM system.dual LIMIT 1;
复制
result

736028

TO_DAY_INTERVAL

函数 返回类型 描述

TO_DAY_INTERVAL(<number>)

INTERVAL DAY

将参数转换成一个INTERVAL DAY类型返回。

SELECT DATE('2015-01-01') + TO_DAY_INTERVAL(2) AS result FROM system.dual LIMIT 1;
复制
result

2015-01-03 00:00:00.0

TO_MONTH_INTERVAL

函数 返回类型 描述

TO_MONTH_INTERVAL(<number>)

INTERVAL MONTH

将参数转换成一个INTERVAL MONTH类型返回。

SELECT DATE('2015-01-01') + TO_MONTH_INTERVAL(2) AS result FROM system.dual LIMIT 1;
复制
result

2015-03-01

TO_YEAR_INTERVAL

函数 返回类型 描述

TO_YEAR_INTERVAL(<number>)

INTERVAL YEAR

将参数转换成一个INTERVAL YEAR类型返回。

SELECT DATE('2015-01-01') + TO_YEAR_INTERVAL(2) AS result FROM system.dual LIMIT 1;
复制
result

2017-01-01

TO_HOUR_INTERVAL

函数 返回类型 描述

TO_HOUR_INTERVAL(<number>)

INTERVAL HOUR

将参数转换成一个INTERVAL HOUR类型返回。

SELECT DATE('2015-01-01') + TO_HOUR_INTERVAL(2) AS result FROM system.dual LIMIT 1;
复制
result

2015-01-01 02:00:00.0

TO_MINUTE_INTERVAL

函数 返回类型 描述

TO_MINUTE_INTERVAL(<number>)

INTERVAL MINUTE

将参数转换成一个INTERVAL MINUTE类型返回。

SELECT DATE('2015-01-01') + TO_MINUTE_INTERVAL(2) AS result FROM system.dual LIMIT 1;
复制
result

2015-01-01 00:02:00.0

TO_SECOND_INTERVAL

函数 返回类型 描述

TO_SECOND_INTERVAL(<number>)

INTERVAL SECOND

将参数转换成一个INTERVAL SECOND类型返回。

SELECT DATE('2015-01-01') + TO_SECOND_INTERVAL(2) AS result FROM system.dual LIMIT 1;
复制
result

2015-01-01 00:00:02.0

TD_INT_TO_TIME

函数 返回类型 描述

TD_INT_TO_TIME(<HHmmss>)

见描述

参数 <HHmmss> 必须是一个六位整数。将参数转换为时间返回。

SELECT TD_INT_TO_TIME(123456) AS result FROM system.dual LIMIT 1;
复制
result

12:34:56

SYSTIMESTAMP

函数 返回类型 描述

SYSTIMESTAMP

TIMESTAMP

返回当前系统TIMESTAMP。和 current_timestamp 同义。注意,*systimestamp 使用时后面不加括号。*

SELECT SYSTIMESTAMP AS result FROM system.dual LIMIT 1;
复制
result

2018-09-10 19:54:24.132

TRUNC

函数 返回类型 描述

TRUNC(<date>, <unit>)

DATE

返回给定日期 date 在指定单位 unit 内的开始值。例如,如果 unitMONTH,则返回给定日期所在月的第一天。

说明

参数*unit*为日期单位,可以是:世纪(CC)、年(YEAR/YYYY/YY)、季度(Q)、月(MONTH/MON/MM)、日(DAY/D/DY)、时(HH)和分(MI)。参数*date*为日期,支持含有毫秒的值,如TRUNC('2018-07-31 12:12:12.111','DAY')。

inceptor.udf.v2.enabled开关开启时:

  • 返回结果默认包含不为零的时间部分。如要不显示时间部分,需要在hive_site.xml文件中设置inceptor.date.show.time为false;

  • 输入值中的毫秒级数会被保存在返回的DATE类型结果中,可以通过CAST AS TIMESTAMP提取;

  • 参数*date*值超出合法日期范围时会返回NULL。

此外,inceptor.udf.v2.enabled和*inceptor.support.english.date.format*中有一个为true时,参数*date*支持英文日期格式作为合法输入格式。

SELECT TRUNC('2016-10-22 11:22:33','YYYY') AS result FROM system.dual LIMIT 1;
复制
result

2016-01-01

SELECT TRUNC('2016-10-22 11:22:33','MM') AS result FROM system.dual LIMIT 1;
复制
result

2016-10-01

NEXT_DAY

函数 返回类型 描述

NEXT_DAY(<date>, '<dayofweek>')

DATE

需要两个参数:一个日期 <date> 和周中的一天 <dayofweek>(例如“星期天”、“Sunday”)。返回从 <date> 开始第一个 <dayofweek> 的日期。

下面例子返回 2015-12-25后的第一个星期天。

SELECT NEXT_DAY('2015-12-25','星期天') AS result FROM system.dual LIMIT 1
复制
result

2015-12-27

FROM_UTC_TIMESTAMP

函数 返回类型 描述

FROM_UTC_TIMESTAMP(<date>, <timezone>)

DATE

需要两个参数:日期 <date> 和目标时区 <timezone>。该函数将 <date> 当做UTC时区的时间, 转化成 <timezone> 时区中的时间。

SELECT FROM_UTC_TIMESTAMP('1970-01-01 08:00:00','PST') AS result FROM system.dual LIMIT 1;
复制
result

1970-01-01 00:00:00.0

TO_UTC_TIMESTAMP

函数 返回类型 描述

TO_UTC_TIMESTAMP(<date>, <timezone>)

DATE

需要两个参数:日期 <date> 和目标时区 <timezone>。该函数将 <date> 当做 <timezone> 时区的时间, 转化成UTC时区中的时间。

SELECT TO_UTC_TIMESTAMP('1970-01-01 00:00:00.0', 'PST') AS result FROM system.dual LIMIT 1;
复制
result

1970-01-01 08:00:00.0

numtoyminterval

函数 返回类型 描述

numtoyminterval(interval_number, year|month)

year-month

将<interval_number>转换为year-month interval类型。

SELECT numtoyminterval(12, 'month') AS RESULT FROM system.dual LIMIT 1;
复制
result

1

numtodsinterval

函数 返回类型 描述

numtodsinterval(interval_number, day|hour|minute|second)

day-time

将<interval_number>转换为day-time interval类型。

SELECT numtodsinterval(1, 'day') AS RESULT FROM system.dual;
复制
result

1