在这里插入图片描述

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/bicheng/95660.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95660.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95660.shtml

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

相关文章

KSZ8081寄存器介绍

一、寄存器概览KSZ8081MNX/RNB 支持 IEEE 802.3 标准的 MII 管理接口&#xff08;MDIO&#xff09;&#xff0c;寄存器地址范围为 0x00 - 0x1F&#xff0c;其中寄存器 0x00 - 0x08 为 IEEE 标准寄存器&#xff0c;0x09 - 0x1F 为扩展功能寄存器。寄存器按功能可分为基本控制与状…

力扣190:颠倒二进制位

力扣190:颠倒二进制位题目思路代码题目 颠倒给定的 32 位无符号整数number的二进制位。 思路 思路很简单&#xff0c;我们只需要得到number从低位到高位的每一个二进制位再把二进制位移到颠倒的res的对应二进制位即可&#xff0c;例如number的最低位为1那么res的最高位即1&a…

鸿蒙NEXT交互机制解析:从输入设备到手势响应的全面指南

深入探索鸿蒙NEXT的交互设计&#xff0c;掌握下一代人机交互核心技术在智能设备无处不在的今天&#xff0c;一个操作系统的交互设计质量直接影响着用户体验。鸿蒙NEXT作为华为推出的新一代操作系统&#xff0c;在交互设计上带来了许多创新和突破。本文将全面解析鸿蒙NEXT的交互…

通过IDEA写一个服务端和一个客户端之间的交互

服务端代码&#xff1a;WebSocketConfig代码package org.example.hufamessagedemo;import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.config.annotation.*;Configuration EnableWebSocket public class WebSocketConfig i…

玩客云刷机Armbian + CasaOS,轻nas系统,以及扩展

网上太多的教程&#xff0c;综合了一下&#xff0c;自己一边参考一边尝试&#xff0c;昨天晚上做的&#xff0c;感觉今天快忘了&#xff0c;记录一下&#xff0c;少走弯路。 随着矿潮的退去&#xff0c;市场上涌现出了众多所谓的“矿渣盒子”&#xff0c;这些设备往往因为价格低…

【Linux】环境变量与程序地址空间详解

前言&#xff1a;欢迎各位光临本博客&#xff0c;这里小编带你直接手撕Linux程序地址空间&#xff0c;文章并不复杂&#xff0c;愿诸君耐其心性&#xff0c;忘却杂尘&#xff0c;道有所长&#xff01;&#xff01;&#xff01;&#xff01; **&#x1f525;个人主页&#xff1a…

机器学习 - Kaggle项目实践(8)Spooky Author Identification 作者识别

Spooky Author Identification | Kaggle Approaching (Almost) Any NLP Problem on Kaggle &#xff08;参考&#xff09; Spooky Author Identification | Kaggle &#xff08;My work&#xff09; 根据三位的一些作品训练集&#xff0c;三分类测试集是哪个作家写的概率。 …

[frontend]WebGL是啥?

对于初学者来说&#xff0c;通常的建议是&#xff1a; 不要直接从原生 WebGL 开始&#xff0c;而是先使用一个基于 WebGL 的高级框架或库&#xff0c;最著名的就是 Three.js。 webgl是啥 three.js是啥&#xff1f; Three.js 封装了 WebGL 的复杂细节&#xff0c;提供了更简单、…

[光学原理与应用-400]:设计 - 深紫外皮秒脉冲激光器 - 元件 - 声光调制器AOM

声光调制器&#xff08;Acousto-Optic Modulator, AOM&#xff09;是深紫外皮秒脉冲激光器中实现脉冲主动控制、频率稳定及光束管理的核心元件。其通过声波与光波的弹光相互作用&#xff0c;在皮秒时间尺度内实现激光强度、频率或传播方向的精准调制。以下从工作原理、关键性能…

25高教社杯数模国赛【D题顶流思路+问题分析】

注&#xff1a;本内容由”数模加油站“ 原创出品&#xff0c;虽无偿分享&#xff0c;但创作不易。欢迎参考teach&#xff0c;但请勿抄袭、盗卖或商用。后续都在”数模加油站“......

利用 openssl api 实现 TLS 双向认证

1. 环境 openssl1.1.1gwget https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1g/openssl-1.1.1g.tar.gz sha256 为&#xff1a; ddb04774f1e32f0c49751e21b67216ac87852ceb056b75209af2443400636d46Linux 环境 2. 静态编译 openssl tar -zxvf openssl-1.1.1…

低代码开发平台技术总结

一、 核心定义 低代码开发平台&#xff08;Low-Code Development Platform, LCDP&#xff09;是一种通过图形化界面、可视化建模、拖拽组件和模型驱动逻辑来构建应用程序的开发环境。其核心目标是显著减少传统手写代码的数量&#xff0c;从而降低开发门槛&#xff0c;提升应用交…

Web与Nginx网站服务

文章目录前言1、Web 概念1.1 Web 的特点1.2 B/S 架构模型1.3 Web 请求与响应过程1.4 静态资源与动态资源1.5 Web 的发展阶段1.6 小结2、HTTP 与 HTTPS 协议2.1 http与https区别2.2 HTTPS 握手流程2.3 HTTP状态码2.3.1 HTTP 状态码概览2.3.2 常用状态码详解3、Nginx 概念3.1 Ngi…

【算法--链表】25.K个一组翻转链表--通俗讲解

一、题目是啥?一句话说清 给你一个链表,每k个节点一组进行反转,如果最后剩余的节点不足k个,则保持原状。需要实际交换节点,而不仅仅是改变值。 示例: 输入:head = [1,2,3,4,5], k = 2 输出:[2,1,4,3,5](因为每2个一组反转,最后剩余5不足2个,保持原状) 二、解题核…

Git指令 | 个人学习笔记

主要包含git的日常核心操作。 1.创建新仓库 创建新文件夹&#xff0c;打开&#xff0c;然后执行。 git init2.创建一个本地仓库的克隆版本 先cd到指定的目录下&#xff0c;再 git clone /path/to/respository # 指定远程分支 git clone -b <分支名> <仓库地址> …

Apache 的安装及基本使用

1 Apache 简介Apache HTTP Server&#xff08;通常简称 “Apache”&#xff09;是世界上最流行、历史最悠久的开源 Web 服务器软件之一&#xff0c;由 Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;维护。它的核心功能是接收客户端&#xff08;如浏览器…

五大主流大语言模型(LLM)对比

文章目录&#x1f916; 五大主流大型语言模型&#xff08;LLM&#xff09;对比1. ChatGPT (GPT-5) - OpenAI2. Claude 4 (Sonnet & Opus) - Anthropic3. Gemini 2.5 Pro - Google DeepMind4. Grok 4 - xAI5. DeepSeek R1 - 深度求索五款模型的综合对比表&#x1f680; 该如…

redo log详解

在 MySQL 中&#xff0c;Redo Log&#xff08;重做日志&#xff09; 是 InnoDB 存储引擎实现事务持久性&#xff08;ACID 中的 D&#xff09; 的核心机制&#xff0c;同时也通过 “预写日志&#xff08;Write-Ahead Logging, WAL&#xff09;” 策略提升了数据写入性能。它记录…

Linux awk命令完全指南:从原理到实战,搞定文本处理难题

在Linux世界里&#xff0c;文本处理是运维、开发绕不开的日常——从分析日志、提取配置信息到统计数据&#xff0c;都需要高效的工具支撑。而awk&#xff0c;作为一款强大的文本分析语言&#xff0c;凭借“按字段处理”的核心能力&#xff0c;成为了比grep&#xff08;单纯匹配…

毕业项目推荐:68-基于yolov8/yolov5/yolo11的水稻虫害检测识别系统(Python+卷积神经网络)

文章目录 项目介绍大全&#xff08;可点击查看&#xff0c;不定时更新中&#xff09;概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式…