TDengine 时间函数 TIMETRUNCATE 用户手册

在这里插入图片描述

TDengine TIMETRUNCATE 函数用户使用手册

函数概述

TIMETRUNCATE 是 TDengine 中的一个时间处理标量函数,用于将时间戳按照指定的时间单位进行截断操作。该函数在时间数据聚合、分组和统计分析中非常有用,特别适用于智能电表等时序数据的分析场景。

语法

TIMETRUNCATE(expr, time_unit [, use_current_timezone])

参数说明

参数类型必需说明
exprTIMESTAMP/BIGINT/VARCHAR/NCHAR要截断的时间表达式
time_unit时间单位标识符时间单位,不使用引号
use_current_timezoneINT是否使用当前时区(0=UTC,1=当前时区),默认为1

支持的时间单位

时间单位说明示例
1b纳秒截断到纳秒
1u微秒截断到微秒
1a毫秒截断到毫秒
1s截断到秒
1m分钟截断到分钟
1h小时截断到小时
1d截断到天
1w截断到周(从周四开始)

返回值

  • 返回类型:TIMESTAMP
  • 精度:与当前数据库设置的时间精度一致
  • 特殊情况:输入不符合时间日期格式的字符串时返回 NULL

支持的输入类型

  1. TIMESTAMP 类型:标准时间戳
  2. BIGINT 类型:Unix 时间戳
  3. VARCHAR/NCHAR 类型:符合 ISO8601/RFC3339 标准的日期时间格式字符串

使用示例

基础截断操作

-- 使用test数据库的智能电表数据
USE test;-- 截断到秒(注意时间单位不使用引号)
SELECT TIMETRUNCATE('2023-10-15 14:30:25.123', 1s);
-- 结果: 2023-10-15 14:30:25.000-- 截断到分钟
SELECT TIMETRUNCATE('2023-10-15 14:30:25', 1m);
-- 结果: 2023-10-15 14:30:00.000-- 截断到小时
SELECT TIMETRUNCATE('2023-10-15 14:30:25', 1h);
-- 结果: 2023-10-15 14:00:00.000-- 截断到天
SELECT TIMETRUNCATE('2023-10-15 14:30:25', 1d);
-- 结果: 2023-10-15 00:00:00.000

智能电表数据应用示例

1. 按小时统计电表数据
-- 统计每小时的平均电流和电压
SELECT TIMETRUNCATE(ts, 1h) as hour_time,AVG(current) as avg_current,AVG(voltage) as avg_voltage,COUNT(*) as data_count
FROM test.meters 
WHERE ts >= '2023-10-01' AND ts < '2023-10-02'
GROUP BY TIMETRUNCATE(ts, 1h)
ORDER BY hour_time;
2. 按天分组分析电表读数
-- 统计每天各个位置的电表数据
SELECT TIMETRUNCATE(ts, 1d) as day_time,location,AVG(current) as daily_avg_current,MAX(voltage) as daily_max_voltage,MIN(voltage) as daily_min_voltage
FROM test.meters 
WHERE ts >= '2023-10-01'
GROUP BY TIMETRUNCATE(ts, 1d), location
ORDER BY day_time, location;
3. 特定子表的分钟级数据统计
-- d0电表的分钟级功率分析
SELECT TIMETRUNCATE(ts, 1m) as minute_time,AVG(current * voltage) as avg_power,MAX(phase) as max_phase
FROM test.d0 
WHERE ts >= NOW() - 1d
GROUP BY TIMETRUNCATE(ts, 1m)
ORDER BY minute_time;
4. 按周统计不同组别的电表数据
-- 按周统计不同groupid的电表数据
SELECT TIMETRUNCATE(ts, 1w) as week_time,groupid,COUNT(*) as weekly_readings,AVG(current) as weekly_avg_current
FROM test.meters 
WHERE ts >= '2023-09-01'
GROUP BY TIMETRUNCATE(ts, 1w), groupid
ORDER BY week_time, groupid;

时区处理示例

-- 使用 UTC 时区截断(假设当前时区为 UTC+8)
SELECT TIMETRUNCATE(ts, 1d, 0) as utc_day,COUNT(*) as count
FROM test.meters 
WHERE ts >= '2023-10-15' AND ts < '2023-10-16'
GROUP BY TIMETRUNCATE(ts, 1d, 0);-- 使用当前时区截断
SELECT TIMETRUNCATE(ts, 1d, 1) as local_day,COUNT(*) as cnt
FROM test.meters 
WHERE ts >= '2023-10-15' AND ts < '2023-10-16'
GROUP BY TIMETRUNCATE(ts, 1d, 1);

复杂业务场景应用

1. 电表异常检测(按小时分析)
-- 检测每小时电压异常的电表
SELECT TIMETRUNCATE(ts, 1h) as hour_time,location,COUNT(*) as abnormal_count
FROM test.meters 
WHERE voltage > 250 OR voltage < 200
GROUP BY TIMETRUNCATE(ts, 1h), location
HAVING COUNT(*) > 5
ORDER BY hour_time DESC;
2. 电表负载分析(按日统计)
-- 每日用电负载分析
SELECT TIMETRUNCATE(ts, 1d) as date,SUM(current * voltage) / 1000 as daily_power_kwh,AVG(current * voltage) as avg_power_w
FROM test.meters 
WHERE location = 'Beijing.Chaoyang'
GROUP BY TIMETRUNCATE(ts, 1d)
ORDER BY date;
3. 多表对比分析
-- 对比不同电表同一小时的数据
SELECT TIMETRUNCATE(d0.ts, 1h) as hour_time,AVG(d0.current) as d0_avg_current,AVG(d1.current) as d1_avg_current,AVG(d0.voltage) as d0_avg_voltage,AVG(d1.voltage) as d1_avg_voltage
FROM test.d0, test.d1
WHERE TIMETRUNCATE(d0.ts, 1h) = TIMETRUNCATE(d1.ts, 1h)AND d0.ts >= '2023-10-15' AND d0.ts < '2023-10-16'AND d1.ts >= '2023-10-15' AND d1.ts < '2023-10-16'
GROUP BY TIMETRUNCATE(d0.ts, 1h)
ORDER BY hour_time;

注意事项和最佳实践

1. 语法要点

  • 时间单位不使用引号1s1h1d 等(这是关键区别)
  • 函数返回的时间戳精度与数据库设置一致
  • 输入时间戳精度由查询表的精度决定

2. 时区处理要点

  • use_current_timezone 参数仅对 1d1w 时间单位有效
  • 默认使用当前时区进行截断(use_current_timezone=1
  • 在分析跨时区的智能电表数据时需特别注意时区设置

3. 周截断特殊性

  • 周截断基于 Unix 时间戳计算(1970年1月1日为起点)
  • Unix 时间戳起始于周四,因此所有周截断结果都是周四
  • 这与常见的周一作为一周开始的习惯不同

4. 性能优化建议

-- 在大数据量查询中,建议在 WHERE 条件中先过滤时间范围
SELECT TIMETRUNCATE(ts, 1h) as hour_time,AVG(current) as avg_current
FROM test.meters 
WHERE ts >= '2023-10-15' AND ts < '2023-10-16'  -- 先过滤时间范围
GROUP BY TIMETRUNCATE(ts, 1h)
ORDER BY hour_time;

5. 错误处理

-- 无效的时间格式会返回 NULL
SELECT TIMETRUNCATE('invalid-date', 1d);
-- 结果: NULL-- 时间单位如果用引号包围会导致语法错误
SELECT TIMETRUNCATE('2023-10-15', '1s');
-- 错误: syntax error-- 正确写法(不使用引号)
SELECT TIMETRUNCATE('2023-10-15', 1s);

智能电表场景的实用技巧

1. 创建时间维度视图

-- 创建按小时聚合的电表数据视图
CREATE VIEW hourly_meter_stats AS
SELECT TIMETRUNCATE(ts, 1h) as hour,location,groupid,AVG(current) as avg_current,AVG(voltage) as avg_voltage,AVG(phase) as avg_phase,COUNT(*) as reading_count
FROM test.meters 
GROUP BY TIMETRUNCATE(ts, 1h), location, groupid;

2. 定时报表查询

-- 生成月度电表使用报告
SELECT TIMETRUNCATE(ts, 1d) as date,location,SUM(current * voltage * 24) / 1000 as estimated_daily_kwh
FROM test.meters 
WHERE ts >= DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY TIMETRUNCATE(ts, 1d), location
ORDER BY date DESC, estimated_daily_kwh DESC;

常见问题

Q1: 为什么时间单位不需要引号?

A: 根据源码分析,TIMETRUNCATE 函数的 time_unit 参数被定义为特殊的时间单位标识符,不是普通的字符串参数,因此不需要用引号包围。

Q2: 如何实现按周一开始的周截断?

A: 可以通过时间偏移来实现:

# 使用毫秒偏移(3天 = 3 * 24 * 60 * 60 * 1000 = 259200000 毫秒)
SELECT TIMETRUNCATE(ts + 259200000, 1w) - 259200000 as monday_week
FROM test.meters;

Q3: 在智能电表数据分析中,建议使用哪种时间单位?

A:

  • 实时监控:使用 1m1s
  • 趋势分析:使用 1h1d
  • 长期统计:使用 1d1w

Q4: 时间单位参数的语法规则是什么?

A: 时间单位参数必须是不带引号的标识符,格式为数字+单位字母,如 1s1m1h1d1w 等。

相关函数

  • TO_TIMESTAMP(): 字符串转时间戳
  • TO_ISO8601(): 时间戳转 ISO8601 格式字符串
  • TIMEDIFF(): 计算时间差
  • NOW(): 获取当前时间戳

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95761.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux电脑怎样投屏到客厅的大电视?支持远程投屏吗?

一般的电脑投屏软件都会推出Windows版本和macOS版本&#xff0c;虽然这两个版本已经覆盖大部分消费者的常用电脑&#xff0c;但是依然有一部分群体因为电脑系统版本问题不能使用投屏软件。 如果你当前使用的是Linux系统的电脑&#xff0c;而且又要将电脑投屏投屏到客厅的大电视…

MP4视频太大如何压缩?分享6种简单便捷的压缩小技巧

随着拍摄高清视频的设备越来越多&#xff0c;我们经常会遇到MP4视频文件体积过大的问题&#xff0c;无论是上传到社交平台、发送给朋友&#xff0c;还是存储在设备中&#xff0c;过大的视频文件都会带来诸多不便。那么&#xff0c;MP4视频太大怎么压缩呢&#xff1f;本文将介绍…

k8s 部署 redis

创建部署文件 vim redis.yaml添加如下内容&#xff1a; apiVersion: v1 kind: Namespace metadata:name: redis --- apiVersion: v1 kind: Secret metadata:name: redis-passwordnamespace: redis type: Opaque data:password: d2d3cmhnZWE # 建议生产环境使用更复杂的密码 ---…

FFMPEG H264

一、H264压缩编码1.1 H264 中的 I 帧、P帧和 B帧H264 使用帧内压缩和帧间压缩的方式提高编码压缩率&#xff1b;H264 采用了独特的 I 帧、P 帧和 B 帧策略来实现&#xff0c;连续帧之间的压缩&#xff1b;1.2 其他概念GOP&#xff08;图像组&#xff09;&#xff1a;一个IDR帧到…

Unity 解决天空盒中间出现一条线

问题解决找到天空盒对应贴图&#xff0c;在Inspector 面板中找到Advanced →Generate Mip Maps 并取消勾选即可。效果动态修改天空盒RenderSettings.skybox targetSkyboxMaterial; DynamicGI.UpdateEnvironment();

Python爬虫实战:研究Showcase模块,构建电商平台销售数据采集和分析系统

1. 引言 1.1 研究背景 在数字经济快速发展的今天,电商平台积累了海量的商品信息、交易数据和用户反馈,这些数据蕴含着丰富的市场洞察。根据中国电子商务研究中心数据,2024 年我国网络零售市场规模突破 15 万亿元,平台商品数据呈现指数级增长。如何高效提取这些数据并转化…

C++中的Reactor和Proactor模型进行系统性解析

<摘要> 本解析系统阐述了网络编程中Reactor与Proactor两种高性能I/O模型的核心概念。Reactor基于同步I/O多路复用&#xff0c;通过事件循环分发通知&#xff0c;由应用层自行完成I/O操作&#xff1b;而Proactor则基于异步I/O&#xff0c;由操作系统完成I/O操作后主动回调…

【技术教程】如何将文档编辑器集成至基于Node.js的网页应用程序中

当今数字化时代&#xff0c;Web应用对在线文档编辑的需求日益增长。无论是构建在线办公系统、内容管理平台还是协作工具&#xff0c;让用户能够直接在浏览器中编辑和处理文档已成为基本需求。 想知道如何为你的 Node.js 应用添加强大的在线文档编辑功能吗&#xff1f;本文手把…

[论文阅读] 人工智能 + 软件工程 | 别让AI写的代码带“漏洞”!无触发投毒攻击的防御困境与启示

别让AI写的代码带“漏洞”&#xff01;无触发投毒攻击的防御困境与启示 论文信息 原标题&#xff1a;Evaluating Defenses Against Trigger-Free Data Poisoning Attacks on NL-to-Code Models&#xff08;评估NL-to-Code模型应对无触发数据投毒攻击的防御方法&#xff09;主要…

【Windows】通过 runas 命令实现多用户权限测试的完整流程

▒ 目录 ▒&#x1f6eb; 导读需求1️⃣ 前期准备&#xff1a;创建管理员/普通测试用户1.1 创建普通用户Test&#xff08;无管理员权限&#xff09;1.2 创建管理员用户Admin&#xff08;含管理员权限&#xff09;2️⃣ 核心操作&#xff1a;通过runas命令切换用户命令行环境2.1…

新后端漏洞(上)- H2 Database Console 未授权访问

漏洞介绍&#xff1a; H2 database是一款Java内存数据库&#xff0c;多用于单元测试。 H2 database自带一个Web管理页面&#xff0c;在Spirng开发中&#xff0c;如果我们设置如下选项&#xff0c;即可允许外部用户访问Web管理页面&#xff0c;且没有鉴权&#xff1a; spring.h2…

2025-09-04 HTML3——区块布局与表单

文章目录1 块元素与行内元素1.1 块元素 (Block-level Element)1.2 行内元素 (Inline Element)2 HTML 布局2.1 使用 <div> 元素2.2 使用 <table> 元素3 表单 (<form>)3.1 输入域&#xff08;<input>&#xff09;3.1.1 文本域&#xff08;Text Fields&am…

云数据库服务(参考自腾讯云计算工程师认证课程)更新中......

数据库基础介绍面临的挑战&#xff1a;数据库系统架构&#xff1a; 数据库DB、数据库管理系统DBMS&#xff08;负责数据库的搭建、使用和维护的系统软件&#xff0c;通过组织、索引、查询、修改数据库文件、实现数据定义、组织、存储、管理以及数据库操作、运行和维护等主要功能…

源滚滚AI编程SillyTavern酒馆配置Claude Code API教程

什么是酒馆 SillyTavern&#xff08;简称 ST&#xff09;是一款本地安装的用户界面&#xff0c;让你能够与文本生成大模型&#xff08;LLM&#xff09;、图像生成引擎以及语音合成&#xff08;TTS&#xff09;模型进行交互。我们的目标是尽可能赋予用户对 LLM 提示词的最大掌控…

软件设计师——软件工程学习笔记

软件工程 一、软件工程基础知识 1. 软件的生存周期&#xff08;1&#xff09;可行性分析与项目开发计划。这个阶段主要确定软件的开发目标及其可行性。参与该阶段的人员有用户、项目负责人、系统分析师。产生的文档有 可行性分析报告、项目开发计划。 &#xff08;2&#xff09…

阿里云ecs 2h2g 实际可用内存不足的情况

Kdump是Linux系统的一种内核崩溃转储机制&#xff0c;它允许在系统发生内核崩溃&#xff08;例如内核panic&#xff09;时&#xff0c;捕获内存的转储信息&#xff0c;从而帮助事后分析故障原因。该过程需要一块预留内存&#xff08;称为crashkernel内存&#xff09;&#xff0…

MySQL抛出的Public Key Retrieval is not allowed

有时候在连接实例的时候会遇到这样的报错Public Key Retrieval is not allowed问题分析这是因为账号使用了sha256_password或者caching_sha2_password 密码插件而sha256_password或者caching_sha2_password 插件为了加快认证过程&#xff0c;在服务端维护了一个密码哈希缓存。当…

ICP可能有用的

可以训练GICP WGICP: Differentiable Weighted GICP-Based Lidar Odometry | GAMMA CT ICP (99 封私信 / 80 条消息) KITTI里程计排行榜上第五&#xff01;CT-ICP&#xff1a;实时弹性激光雷达里程计与回环检测 - 知乎 Faster GICP github.com

nextcyber——Shells和Payloads

Shells和Payloads Shell的基础知识 正向Shells Tom可以在一个Linux目标上发出nc -lvnp 443的命令。他需要从他的攻击机连接到哪个端口&#xff0c;才能成功建立一个shell会话&#xff1f; 443SSH到目标&#xff0c;创建一个bind shell&#xff0c;然后用netcat连接到目标&a…

笔记:现代操作系统:原理与实现(2)

第三章 操作系统结构 操作系统的机制与策略 操作系统乃至计算机系统中控制复杂度的—个重要设计原则是:将策略与机制相分离&#xff0c;其中策略&#xff08;policy&#xff09;表示要‘‘做什么”&#xff0c;机制&#xff08;mechanjsm&#xff09;表示该“如何做”。 操作系…