返回

玩转HANA时间日期相关操作,成就高效数据分析

后端

时间戳、日期和时间操作在 HANA 中的指南

在数据分析和操作中,时间戳、日期和时间操作至关重要。HANA 提供了强大的功能和丰富的函数,使我们能够轻松地处理这些数据类型,以提取有意义的见解。本文将详细探讨在 HANA 中使用时间戳、日期和时间的基本和高级操作,涵盖以下主题:

  • 时间戳操作
  • 日期函数
  • 间隔
  • 时区
  • 时区转换
  • 格式化
  • 解析
  • 比较
  • 提取
  • 截断
  • 四舍五入
  • 时间戳转换
  • 日期计算
  • 日期数学运算
  • 时间序列分析

时间戳操作

时间戳表示特定时刻的数字值,HANA 中的时间戳数据类型为 TIMESTAMP,可以存储到毫秒级别的精度。时间戳操作包括获取当前时间戳、比较时间戳、添加或减去时间间隔等。

-- 获取当前时间戳
SELECT CURRENT_TIMESTAMP FROM DUAL;

-- 比较时间戳
SELECT CASE
    WHEN ts1 > ts2 THEN 'ts1 大于 ts2'
    WHEN ts1 = ts2 THEN 'ts1 等于 ts2'
    ELSE 'ts1 小于 ts2'
END AS comparison_result
FROM table_name;

-- 添加或减去时间间隔
SELECT ts1 + INTERVAL '1 day' AS ts1_plus_one_day,
       ts2 - INTERVAL '1 hour' AS ts2_minus_one_hour
FROM table_name;

日期函数

HANA 提供了丰富的日期函数,可用于提取日期的各个部分、格式化日期、解析日期字符串等。

-- 提取日期的各个部分
SELECT
    DATE(ts) AS date_only,
    TIME(ts) AS time_only,
    YEAR(ts) AS year,
    MONTH(ts) AS month,
    DAY(ts) AS day,
    HOUR(ts) AS hour,
    MINUTE(ts) AS minute,
    SECOND(ts) AS second
FROM table_name;

-- 格式化日期
SELECT TO_CHAR(ts, 'YYYY-MM-DD') AS formatted_date
FROM table_name;

-- 解析日期字符串
SELECT TO_DATE('2023-03-08', 'YYYY-MM-DD') AS parsed_date
FROM DUAL;

间隔

INTERVAL 数据类型用于表示时间间隔,它可以由年、月、日、时、分、秒组成。INTERVAL 可以用于计算日期之间的差异、添加或减去时间间隔等。

-- 计算日期之间的差异
SELECT ts2 - ts1 AS time_difference
FROM table_name;

-- 添加或减去时间间隔
SELECT ts1 + INTERVAL '1 day' AS ts1_plus_one_day,
       ts2 - INTERVAL '1 hour' AS ts2_minus_one_hour
FROM table_name;

时区

HANA 支持时区转换,可以将时间戳或日期从一个时区转换为另一个时区。

-- 将时间戳从 UTC 转换为上海时区
SELECT TO_TIMESTAMP_TZ(ts, 'UTC') AT TIME ZONE 'Asia/Shanghai' AS shanghai_timestamp
FROM table_name;

-- 将日期从东京时区转换为洛杉矶时区
SELECT TO_DATE(date, 'YYYY-MM-DD') AT TIME ZONE 'Asia/Tokyo' AT TIME ZONE 'America/Los_Angeles' AS la_date
FROM table_name;

时区转换

HANA 提供了两种时区转换函数:TO_TIMESTAMP_TZ() 和 TO_DATE_TZ()。

-- 将时间戳从 UTC 转换为上海时区
SELECT TO_TIMESTAMP_TZ(ts, 'UTC') AT TIME ZONE 'Asia/Shanghai' AS shanghai_timestamp
FROM table_name;

-- 将日期从东京时区转换为洛杉矶时区
SELECT TO_DATE(date, 'YYYY-MM-DD') AT TIME ZONE 'Asia/Tokyo' AT TIME ZONE 'America/Los_Angeles' AS la_date
FROM table_name;

格式化

HANA 提供了多种日期格式化函数,可以将时间戳或日期格式化为字符串。

-- 将时间戳格式化为 'YYYY-MM-DD HH:MM:SS'
SELECT TO_CHAR(ts, 'YYYY-MM-DD HH:MM:SS') AS formatted_timestamp
FROM table_name;

-- 将日期格式化为 'DD/MM/YYYY'
SELECT TO_CHAR(date, 'DD/MM/YYYY') AS formatted_date
FROM table_name;

解析

HANA 提供了多种日期解析函数,可以将字符串解析为时间戳或日期。

-- 将字符串解析为时间戳
SELECT TO_TIMESTAMP('2023-03-08 12:34:56') AS parsed_timestamp
FROM DUAL;

-- 将字符串解析为日期
SELECT TO_DATE('2023-03-08') AS parsed_date
FROM DUAL;

比较

HANA 提供了多种日期比较函数,可以比较两个时间戳或日期。

-- 比较两个时间戳
SELECT CASE
    WHEN ts1 > ts2 THEN 'ts1 大于 ts2'
    WHEN ts1 = ts2 THEN 'ts1 等于 ts2'
    ELSE 'ts1 小于 ts2'
END AS comparison_result
FROM table_name;

-- 比较两个日期
SELECT CASE
    WHEN date1 > date2 THEN 'date1 大于 date2'
    WHEN date1 = date2 THEN 'date1 等于 date2'
    ELSE 'date1 小于 date2'
END AS comparison_result
FROM table_name;

提取

HANA 提供了多种日期提取函数,可以提取时间戳或日期的各个部分。

-- 提取时间戳的各个部分
SELECT
    DATE(ts) AS date_only,
    TIME(ts) AS time_only,
    YEAR(ts) AS year,
    MONTH(ts) AS month,
    DAY(ts) AS day,
    HOUR(ts) AS hour,
    MINUTE(ts) AS minute,
    SECOND(ts) AS second
FROM table_name;

-- 提取日期的各个部分
SELECT
    YEAR(date) AS year,
    MONTH(date) AS month,
    DAY(date) AS day
FROM table_name;

截断

HANA 提供了多种日期截断函数,可以将时间戳或日期截断到指定的粒度。

-- 将时间戳截断到天
SELECT TRUNC(ts, 'DAY') AS truncated_timestamp
FROM table_name;

-- 将日期截断到月
SELECT TRUNC(date, 'MONTH') AS truncated_date
FROM table_name;

四舍五入

HANA 提供了多种日期四舍五入函数,可以将时间戳或日期四舍五入到指定的粒度。

-- 将时间戳四舍五入到小时
SELECT ROUND(ts, 'HOUR') AS rounded_timestamp
FROM table_name;

-- 将日期四舍五入到月
SELECT ROUND(date, 'MONTH') AS rounded_date
FROM table_name;

时间戳转换

HANA 提供了多种时间戳转换函数,可以将时间戳从一种格式转换为另一种格式。

-- 将时间戳从 UNIX 时间戳转换为 HANA 时间戳
SELECT TO_TIMESTAMP(unix_timestamp) AS hana_timestamp
FROM table_name;

-- 将时间戳从 HANA 时间戳转换为 UNIX 时间戳
SELECT FROM_UNIXTIME(hana_timestamp) AS unix_timestamp
FROM table_name;

日期计算

HANA 提供了多种日期计算函数,可以对日期进行各种计算。

-- 计算两个日期之间的天数
SELECT DATEDIFF(date2, date1) AS days_between
FROM table_name;

-- 计算某个日期加上或减去指定天数后的日期
SELECT DATE_ADD(date, INTERVAL '1 day') AS date_plus_one_day,
       DATE_SUB(date, INTERVAL '1 week') AS date_minus_one_week
FROM table_name;

日期数学运算

HANA 支持对日期进行数学运算,例如加、减、乘、除等。

-- 计算两个日期之间的天数
SELECT date2 - date1 AS days_between
FROM table_name;

-- 计算某个日期加上或减去指定天数后的日期
SELECT date + INTERVAL '1 day' AS date_plus_one_day,
       date - INTERVAL '1 week' AS date_minus_one_week
FROM table_name;

时间序列分析

时间序列分析涉及对按时间顺序排列的数据