tencent cloud

数据湖计算

产品动态
产品简介
产品概述
产品优势
应用场景
购买指南
计费概述
退费说明
欠费说明
调整配置费用说明
快速入门
新用户开通全流程
DLC 数据导入指引
一分钟入门 DLC 数据分析
一分钟入门 DLC 权限管理
一分钟入门分区表
开启数据优化
跨源分析 EMR Hive 数据
标准引擎配置指引
配置数据访问策略
操作指南
控制台操作介绍
开发指南
运行环境
SparkJar 作业开发指南
PySpark 作业开发指南
查询性能优化指南
UDF 函数开发指南
系统约束
客户端访问
JDBC 访问
TDLC 命令行工具访问
第三方软件联动
Python 访问
实践教程
通过 Power BI 访问 DLC 数据操作指南
建表实践
使用 Apache Airflow 调度 DLC 引擎提交任务
StarRocks 直接查询 DLC 内部存储
Spark 计算成本优化实践
DATA + AI
使用 DLC 分析 CLS 日志
使用角色 SSO 访问 DLC
资源级鉴权指南
在 DLC 中实现 TCHouse-D 读写操作
DLC 原生表
SQL 语法
SuperSQL 语法
标准 Spark 语法概览
标准 Presto 语法概览
保留字
API 文档
History
Introduction
API Category
Making API Requests
Data Table APIs
Task APIs
Metadata APIs
Service Configuration APIs
Permission Management APIs
Database APIs
Data Source Connection APIs
Data Optimization APIs
Data Engine APIs
Resource Group for the Standard Engine APIs
Data Types
Error Codes
通用类参考
错误码
配额与限制
第三方软件连接DLC操作指南
常见问题
权限类常见问题
引擎类常见问题
功能类常见问题
Spark 作业类常见问题
DLC 政策
隐私协议
数据处理和安全协议
服务等级协议
联系我们

日期时间函数

PDF
聚焦模式
字号
最后更新时间: 2024-08-07 17:32:11

DATE

函数语法:
DATE(<expr> date|timestamp|string)
支持引擎:SparkSQL、Presto 。
使用说明:强制类型转换为 date 。
返回类型:date 。
示例:
> select date('2022-02-02');
2022-02-02

TIMESTAMP

函数语法:
TIMESTAMP(<expr> date|timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:强制类型转换为 timestamp。
返回类型:timestamp。
示例:
> select timestamp('2022-02-02 11:11:11');
2022-02-02 11:11:11

ADD_MONTHS

函数语法:
ADD_MONTHS(<start_date> date|timestamp|string, <num> integer)
支持引擎:SparkSQL、Presto。
使用说明:返回 start_date 之后的 num 个月的日期。
返回类型:date。
示例:
> SELECT add_months('2016-08-31', 1);
2016-09-30

CURRENT_DATE

函数语法:
CURRENT_DATE
支持引擎:SparkSQL、Presto。
使用说明:返回查询计算开始时的当前日期。
返回类型:date。
示例:
> SELECT CURRENT_DATE;
2022-07-27

CURRENT_TIMESTAMP

函数语法:
CURRENT_TIMESTAMP
支持引擎:SparkSQL、Presto。
使用说明:返回查询计算开始时的当前时间戳。
返回类型:timestamp。
示例:
> SELECT CURRENT_TIMESTAMP;
2022-07-27 18:06:00.632

CURRENT_TIMEZONE

函数语法:
CURRENT_TIMEZONE(
支持引擎:SparkSQL、Presto。
使用说明:返回当前会话本地时区。
返回类型:string。
示例:
> select CURRENT_TIMEZONE();
Asia/Shanghai

DATEDIFF

函数语法:
DATEDIFF(<end> date|timestamp|string, <start> date|timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:返回从 start 到 end 的天数。
返回类型:integer。
示例:
> SELECT datediff('2009-07-31', '2009-07-30');
1
> SELECT datediff('2009-07-30', '2009-07-31');
-1

DATE_ADD

函数语法:
DATE_ADD(<start_dates> date|timestamp|string, <num> integer)
支持引擎:SparkSQL、Presto。
使用说明:返回 start_date 后 num 天的日期。
返回类型:date。
示例:
> SELECT date_add('2016-07-30', 1);
2016-07-31

DATE_FORMAT

函数语法:
DATE_FORMAT(<ts> date|timestamp|string, <format> string)
支持引擎:SparkSQL、Presto。
使用说明:将时间戳转换指定日期格式 format 的字符串值。
返回类型:string。
示例:
> SELECT date_format('2016-04-08', 'y');
2016

DATE_SUB

函数语法:
DATE_SUB(<start_date> date|timestamp|string, <num> integer)
支持引擎:SparkSQL、Presto。
使用说明:返回 start_date 前 num 天的日期。
返回类型:date。
示例:
> SELECT date_sub('2016-07-30', 1);
2016-07-29

DAY

函数语法:
DAY(<d> date|timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:计算日期/时间戳 d 是这个月的第几天。
返回类型:integer。
示例:
> SELECT day('2009-07-30');
30

DAYOFYEAR

函数语法:
DAYOFYEAR(<d> date|timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:计算 d 是这年的第几天。
返回类型:integer。
示例:
> SELECT dayofyear('2016-04-09');
100

DAYOFMONTH

函数语法:
DAYOFMONTH
支持引擎:SparkSQL、Presto。
使用说明:计算日期/时间戳 d 是这个月的第几天。
返回类型:integer。
示例:
> SELECT dayofmonth('2009-07-30');
30

FROM_UNIXTIME

函数语法:
FROM_UNIXTIME(<unix_time> bigint[, <fmt> string])
支持引擎:SparkSQL、Presto。
使用说明:以格式 fmt 返回 unix_time 所代表的日期/时间。如果省略 fmt,则使用 'yyyy-MM-dd HH:mm:ss'。
返回类型:string。
示例:
> SELECT from_unixtime(0, 'yyyy-MM-dd HH:mm:ss');
1969-12-31 16:00:00
> SELECT from_unixtime(0);
1969-12-31 16:00:00

FROM_UTC_TIMESTAMP

函数语法:
FROM_UTC_TIMESTAMP(<ts> timestamp, <timezone> string)
支持引擎:SparkSQL、Presto。
使用说明:给定 utc 时间戳并将该时间呈现为给定时区的时间戳。
返回类型:timestamp。
示例:
> SELECT from_utc_timestamp('2016-08-31', 'Asia/Seoul');
2016-08-31 09:00:00

HOUR

函数语法:
HOUR(<ts> string|timestamp)
支持引擎:SparkSQL、Presto。
使用说明:返回指定时间戳 ts 的小时部分。
返回类型:integer。
示例:
> SELECT hour('2009-07-30 12:58:59');
12

LAST_DAY

函数语法:
LAST_DAY(<d> date|string)
支持引擎:SparkSQL、Presto。
使用说明:返回日期 d 当前这个月的最后一天。
返回类型:date。
示例:
> SELECT last_day('2009-01-12');
2009-01-31

MINUTE

函数语法:
MINUTE(<ts> timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:返回时间戳 ts 的分钟。
返回类型:integer。
示例:
> SELECT minute('2009-07-30 12:58:59');
58

MONTH

函数语法:
MONTH(<d> date|timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:返回日期 d 的月份。
返回类型:integer。
示例:
> SELECT month('2016-07-30');
7

MONTHS_BETWEEN

函数语法:
MONTHS_BETWEEN(<ts1> date|timestamp|string, <ts2> date|timestamp|string, <roundOff> boolean)
支持引擎:SparkSQL、Presto。
使用说明:如果 ts1 晚于 ts2,则结果为正。如果 ts1 和 ts2 在当月的同一天,或两者都是当月的最后一天,则将忽略当天的时间。否则,差值根据每月31天计算,并四舍五入到8位,除非 roundOff 为false。
返回类型:double
示例:
> SELECT months_between('1997-02-28 10:30:00', '1996-10-30');
3.94959677
> SELECT months_between('1997-02-28 10:30:00', '1996-10-30', false);
3.9495967741935485

NEXT_DAY

函数语法:
NEXT_DAY(<start_date> date|timestamp|string, <day_of_week> string
支持引擎:SparkSQL、Presto。
使用说明:返回start_date后的第一个指定星期。
返回类型: SparkSQL:date Presto:string
示例:
> SELECT next_day('2015-01-14', 'TU');
2015-01-20

NOW

函数语法:
NOW()
支持引擎:SparkSQL、Presto。
使用说明:返回当前时间戳。
返回类型:timestamp。
示例:
> SELECT now();
2020-04-25 15:49:11.914

QUARTER

函数语法:
QUARTER(<d> date|timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:返回 d 所在季度。
返回类型:integer。
示例:
> SELECT quarter('2016-08-31');
3

SECOND

函数语法:
SECOND(<ts> timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:返回当前时间戳的秒数。
返回类型:integer。
示例:
> SELECT second('2009-07-30 12:58:59');
59

TO_TIMESTAMP

函数语法:
TO_TIMESTAMP(<ts_str> string[, <fmt> string]
支持引擎:SparkSQL、Presto。
使用说明:将 fmt 格式的 ts_str 表达式解析为时间戳。输入无效则返回 NULL。默认情况下,如果省略 fmt,它将遵循时间戳的强制转换规则。结果数据类型与配置值一致。
返回类型:timestamp。
示例:
> SELECT to_timestamp('2016-12-31 00:12:00');
2016-12-31 00:12:00
> SELECT to_timestamp('2016-12-31', 'yyyy-MM-dd');
2016-12-31 00:00:00

TO_DATE

函数语法:
TO_DATE(<date_str> string[, <fmt> string])
支持引擎:SparkSQL、Presto。
使用说明:将 fmt 格式的 date_str 表达式解析为日期。输入无效则返回 NULL。默认情况下,如果省略 fmt,它将遵循日期的强制转换规则。结果数据类型与配置值一致。
返回类型:date。
示例:
> SELECT to_date('2009-07-30 04:17:52');
2009-07-30
> SELECT to_date('2016-12-31', 'yyyy-MM-dd');
2016-12-31

TO_UNIX_TIMESTAMP

函数语法:
TO_UNIX_TIMESTAMP(<ts> date|timestamp|string[, <fmt> string])
支持引擎:SparkSQL、Presto。
使用说明:返回 ts 的 unix 时间戳。
返回类型:bigint。
示例:
> SELECT to_unix_timestamp('2016-04-08', 'yyyy-MM-dd');
1460098800

TO_UTC_TIMESTAMP

函数语法:
-- SparkSQL
TO_UTC_TIMESTAMP(<ts> date|timestamp|string, <timezone> string)

-- Presto
TO_UTC_TIMESTAMP(<ts> date|timestamp|string|interger|double|decimal, <timezone> string)
支持引擎:SparkSQL、Presto。
使用说明:将给定时区中的时间戳转换为 UTC。
返回类型:timestamp。
示例:
-- SparkSQL
> SELECT to_utc_timestamp('2016-08-31', 'Asia/Seoul');
2016-08-30 15:00:00
-- Presto
> select to_utc_timestamp(10000, 'UTC');
1970-01-01 08:00:10

TRUNC

函数语法:
TRUNC(<d> date|string, <fmt> string)
支持引擎:SparkSQL、Presto。
使用说明:返回将日期 d 按照 fmt 指定的时间单位进行截取后的日期值。
返回类型:date。
示例:
> SELECT trunc('2019-08-04', 'week');
2019-07-29
> SELECT trunc('2019-08-04', 'quarter');
2019-07-01
> SELECT trunc('2009-02-12', 'MM');
2009-02-01
> SELECT trunc('2015-10-27', 'YEAR');
2015-01-01

DATE_TRUNC

函数语法:
DATE_TRUNC(<fmt> string, <ts> date|timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:返回将时间戳 ts 按照 fmt 截断后的时间戳 。
返回类型:timestamp。
示例:
> SELECT date_trunc('YEAR', '2015-03-05T09:32:05.359');
2015-01-01 00:00:00
> SELECT date_trunc('MM', '2015-03-05T09:32:05.359');
2015-03-01 00:00:00
> SELECT date_trunc('DD', '2015-03-05T09:32:05.359');
2015-03-05 00:00:00
> SELECT date_trunc('HOUR', '2015-03-05T09:32:05.359');
2015-03-05 09:00:00
> SELECT date_trunc('MILLISECOND', '2015-03-05T09:32:05.123456');
2015-03-05 09:32:05.123

UNIX_TIMESTAMP

函数语法:
UNIX_TIMESTAMP([<ts> date|timestamp|string[, fmt]])
支持引擎:SparkSQL、Presto。
使用说明:返回当前或指定时间的 UNIX 时间戳。
返回类型:bigint。
示例:
> SELECT unix_timestamp();
1476884637
> SELECT unix_timestamp('2016-04-08', 'yyyy-MM-dd');
1460041200

DAYOFWEEK

函数语法:
DAYOFWEEK(<d> date|timestamp|string)
支持引擎:parkSQL、Presto。
使用说明:回日期/时间戳“d”是星期几。
返回类型:nteger。
示例:
> SELECT dayofweek('2009-07-30');
5

WEEKDAY

函数语法:
WEEKDAY(<d> date|timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:返回日期/时间戳“d”是星期几。
返回类型:integer。
示例:
> SELECT weekday('2009-07-30');
3

WEEKOFYEAR

函数语法:
WEEKOFYEAR(<d> date|timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:返回给定日期“d”是一年中的第几周。
返回类型:integer。
示例:
> SELECT weekofyear('2008-02-20');
8

YEAR

函数语法:
YEAR(<d> date|timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:返回日期/时间戳“d”中的年份。
返回类型:integer。
示例:
> SELECT year('2016-07-30');
2016

MAKE_DATE

函数语法:
MAKE_DATE(<year> integer, <month> integer, <day> integer)
支持引擎:SparkSQL、Presto。
使用说明:从 year、month 和 day 字段创建日期。
返回类型:date。
示例:
> SELECT make_date(2013, 7, 15);
2013-07-15
> SELECT make_date(2019, 7, NULL);
NULL

MAKE_TIMESTAMP

函数语法:
MAKE_TIMESTAMP(<year> integer, <month> integer, <day> integer, <hour> integer, <min> integer, <sec> integer|double|decimal[, <timezone> string])
支持引擎:SparkSQL、Presto。
使用说明:根据给定字段创建时间戳。
返回类型:timestamp。
示例:
> SELECT make_timestamp(2014, 12, 28, 6, 30, 45.887);
2014-12-28 06:30:45.887
> SELECT make_timestamp(2014, 12, 28, 6, 30, 45.887, 'CET');
2014-12-27 21:30:45.887
> SELECT make_timestamp(2019, 6, 30, 23, 59, 60);
2019-07-01 00:00:00
> SELECT make_timestamp(2019, 6, 30, 23, 59, 1);
2019-06-30 23:59:01
> SELECT make_timestamp(null, 7, 22, 15, 30, 0);
NULL

DATE_PART

函数语法:
DATE_PART(<field> string, <source> date|timestamp)
支持引擎:SparkSQL、Presto。
使用说明:提取日期/时间戳的一部分。
返回类型:integer|double。
示例:
> SELECT date_part('YEAR', TIMESTAMP '2019-08-12 01:00:00.123456');
2019
> SELECT date_part('week', timestamp '2019-08-12 01:00:00.123456');
33
> SELECT date_part('doy', DATE'2019-08-12');
224
> SELECT date_part('SECONDS', timestamp'2019-10-01 00:00:01.000001');
1.000001

DATE_FROM_UNIX_DATE

函数语法:
DATE_FROM_UNIX_DATE(<unix_timestamp> integer)
支持引擎:SparkSQL、Presto。
使用说明:根据自1970-01-01以来的天数创建日期。
返回类型:date。
示例:
> SELECT date_from_unix_date(1);
1970-01-02

UNIX_DATE

函数语法:
UNIX_DATE(<d> date)
支持引擎:SparkSQL、Presto。
使用说明:返回自1970-01-01以来的天数。
返回类型:integer。
示例:
> SELECT unix_date(DATE("1970-01-02"));
1

TIMESTAMP_SECONDS

函数语法:
TIMESTAMP_SECONDS(<sec> bigint|double|decimal)
支持引擎:SparkSQL、Presto。
使用说明:从 UTC 纪元以来的秒数创建时间戳。
返回类型:timestamp。
示例:
> SELECT timestamp_seconds(1230219000);
2008-12-25 07:30:00
> SELECT timestamp_seconds(1230219000.123);
2008-12-25 07:30:00.123

TIMESTAMP_MILLIS

函数语法:
TIMESTAMP_MILLIS(<milli> bigint|double|decimal)
支持引擎:SparkSQL、Presto。
使用说明:从 UTC 纪元以来的毫秒数创建时间戳。
返回类型:timestamp。
示例:
> SELECT timestamp_millis(1230219000123);
2008-12-25 07:30:00.123

TIMESTAMP_MICROS

函数语法:
TIMESTAMP_MICROS(<micro> bigint)
支持引擎:SparkSQL、Presto。
使用说明:从 UTC 纪元以来的毫秒数创建时间戳。
返回类型:timestamp。
示例:
> SELECT timestamp_micros(1230219000123123);
2008-12-25 07:30:00.123123

UNIX_SECONDS

函数语法:
UNIX_SECONDS(<ts> timestamp)
支持引擎:SparkSQL、Presto。
使用说明:返回自1970-01-01 00:00:00 UTC以来的秒数。
返回类型:bigint。
示例:
> SELECT unix_seconds(TIMESTAMP('1970-01-01 00:00:01Z'));
1

UNIX_MILLIS

函数语法:
UNIX_MILLIS(<ts> timestamp)
支持引擎:SparkSQL、Presto。
使用说明:返回自1970-01-01 00:00:00 UTC 以来的毫秒数。
返回类型:bigint。
示例:
> SELECT unix_millis(TIMESTAMP('1970-01-01 00:00:01Z'));
1000

UNIX_MICROS

函数语法:
UNIX_MICROS(<ts> timestamp)
支持引擎:SparkSQL。
使用说明:返回自1970-01-01 00:00:00 UTC 以来的微秒数。
返回类型:bigint。
示例:
> SELECT unix_micros(timestamp '1970 00:00:00.001')
1000

DATEADD/TIMESTAMP_ADD

函数语法:
TIMESTAMP_ADD(<date|timestamp> dt, <int> delta, <string> pattern)
TIMESTAMP_ADD(<date|timestamp> dt, <int> delta, <string> pattern)
支持引擎:SparkSQL。
引擎版本要求:需在2023年12月07日及以后购买的引擎、或升级到最新引擎。
使用说明:在指定的日期或时间上,根据指定的单位和偏移量计算最终的时间。
dt:输入的日期或时间格式。如果为null则返回为null。
delta:必填,int类型。如果为null则返回null。
pattern:必填,string类型,单位。pattern 可以支持:
年(标准"y", 可兼容"-year", "yyyy")
月(标准"M", 可兼容"-month","-mon", "MM")
日(标准"d",可兼容"-day","dd")
小时(标准"H",可兼容"-hour", "hh", "HH", "h")
分钟 (标准"m",可兼容"mi", "mm")
秒(标准"s",可兼容"ss")
微秒(标准"S",可兼容"SSS")
不允许输入其他的类型,否则会报错。
注意:
当 delta 的单位是月时,如果 delta 的月部分在增加 delta 值之后不造成 Day 溢出,则保持 Day 值不变,否则将 Day 值设置为结果月份的最后1天。
注意输出的时间默认是时区的。
月M和分钟m的单位区别;兼容了0-12小时制h和0-24小时制H,但是推荐使用H。
返回类型:timestamp。
示例:
> SELECT timestamp_add(date '2016-12-31', -1, 'M');
2016-11-30T00:00:00.000+08:00
> SELECT timestamp_add(timestamp '2016-12-31 00:12:00', 1, 'm');
2016-12-31T00:13:00.000+08:00
> SELECT timestamp_add(timestamp '2016-12-31 00:00:00', -1, 'm');
2016-12-30T23:59:00.000+08:00


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈