当前位置: 首页 > java >正文

TDengine NOW() 函数用户使用手册

在这里插入图片描述

TDengine NOW() 函数用户使用手册

目录

  • 功能概述
  • 函数语法
  • 返回值说明
  • 技术特性
  • 使用场景及示例
  • 时间运算操作
  • 注意事项
  • 常见问题

功能概述

NOW() 函数是 TDengine 中的时间函数,用于获取客户端当前系统时间。该函数在时序数据库中特别有用,可以用于数据插入、时间过滤、时间计算等多种场景。

函数语法

NOW()

返回值说明

  • 数据类型:TIMESTAMP
  • 时间精度:与当前 DATABASE 设置的时间精度一致
  • 时间格式:根据数据库精度返回相应格式的时间戳

技术特性

时间精度支持

根据源码分析,NOW() 函数支持以下时间精度:

  • 毫秒精度 (TSDB_TIME_PRECISION_MILLI)
  • 微秒精度 (TSDB_TIME_PRECISION_MICRO)
  • 纳秒精度 (TSDB_TIME_PRECISION_NANO)

适用范围

  • 表类型:适用于表和超级表
  • 字段类型:在 WHERE 或 INSERT 语句中只能作用于 TIMESTAMP 类型字段
  • 嵌套查询:支持内层查询和外层查询

使用场景及示例

1. 基础查询获取当前时间

-- 获取当前系统时间
SELECT NOW() AS current_timestamp;

输出示例

+-------------------------+
| current_timestamp       |
+-------------------------+
| 2025-09-03 14:30:25.123 |
+-------------------------+

2. 数据插入场景

创建表结构
-- 创建传感器数据表
CREATE STABLE sensors (ts TIMESTAMP,temperature FLOAT,humidity FLOAT
) TAGS (device_id INT, location NCHAR(50));-- 创建子表
CREATE TABLE sensor_001 USING sensors TAGS (1, '北京机房');
插入当前时间数据
-- 使用 NOW() 插入当前时间戳
INSERT INTO sensor_001 VALUES (NOW(), 25.6, 60.8);-- 批量插入多条记录
INSERT INTO sensor_001 VALUES (NOW(), 25.6, 60.8),(NOW() - 1m, 25.2, 61.2),(NOW() - 2m, 24.8, 61.5);

3. 数据查询和过滤

查询最近时间范围的数据
-- 查询最近1小时的数据
SELECT * FROM sensor_001 
WHERE ts > NOW() - 1h;-- 查询最近24小时的数据
SELECT * FROM sensor_001 
WHERE ts BETWEEN NOW() - 1d AND NOW();-- 查询今天的数据
SELECT * FROM sensor_001 
WHERE ts >= TODAY() AND ts < NOW();
实时数据监控
-- 查询最近5分钟内的平均温度
SELECT AVG(temperature) as avg_temp 
FROM sensor_001 
WHERE ts > NOW() - 5m;-- 查询当前时间前后30秒的数据
SELECT * FROM sensor_001 
WHERE ts BETWEEN NOW() - 30s AND NOW() + 30s;

4. 时间差计算

-- 计算数据记录距离当前时间的秒数差
SELECT ts, temperature, (NOW() - ts) / 1000000 AS seconds_ago
FROM sensor_001 
ORDER BY ts DESC 
LIMIT 10;-- 查找超过1小时未更新的设备
SELECT device_id, MAX(ts) as last_update,(NOW() - MAX(ts)) / 1000000 / 3600 AS hours_since_update
FROM sensors 
GROUP BY device_id
HAVING hours_since_update > 1;

5. 数据分析场景

按时间窗口聚合
-- 按小时聚合最近24小时的数据
SELECT _wstart as hour_start,AVG(temperature) as avg_temp,MAX(temperature) as max_temp,MIN(temperature) as min_temp
FROM sensor_001 
WHERE ts > NOW() - 1d
INTERVAL(1h);-- 实时滑动窗口分析
SELECT _wstart,COUNT(*) as record_count,AVG(temperature) as avg_temp
FROM sensor_001 
WHERE ts > NOW() - 2h
INTERVAL(10m) SLIDING(1m);

时间运算操作

NOW() 函数支持时间加减运算,支持的时间单位包括:

时间单位符号说明示例
纳秒bnanosecondNOW() + 100b
微秒umicrosecondNOW() - 500u
毫秒amillisecondNOW() + 200a
ssecondNOW() - 30s
分钟mminuteNOW() + 15m
小时hhourNOW() - 2h
ddayNOW() + 1d
wweekNOW() - 1w

时间运算示例

-- 各种时间单位的运算示例
SELECT NOW() as current_time,NOW() + 1s as one_second_later,NOW() - 30m as thirty_minutes_ago,NOW() + 2h as two_hours_later,NOW() - 1d as yesterday_same_time,NOW() + 1w as next_week_same_time;-- 复合时间运算
SELECT * FROM sensor_001 
WHERE ts BETWEEN NOW() - 1d - 30m AND NOW() - 30m;-- 时间边界查询
SELECT * FROM sensor_001 
WHERE ts > NOW() - 1h + 100a;  -- 1小时前再加100毫秒

注意事项

1. 时间精度一致性

-- 确保时间精度与数据库设置一致
-- 如果数据库精度为毫秒,NOW() 返回毫秒精度时间戳
-- 如果数据库精度为微秒,NOW() 返回微秒精度时间戳

2. 客户端时间 vs 服务器时间

-- NOW() 返回客户端系统时间,不是服务器时间
-- 在分布式环境中需要注意时间同步问题

3. 性能考虑

-- 在大量数据查询中,建议将 NOW() 的结果先计算出来
-- 避免在循环或大量记录处理中重复调用 NOW()-- 推荐做法
SELECT @current_time := NOW();
SELECT * FROM sensor_001 WHERE ts > @current_time - 1h;-- 不推荐在大数据量情况下
SELECT * FROM huge_table WHERE ts > NOW() - 1h;  -- 每行都会计算NOW()

常见问题

Q1: NOW() 与 TODAY() 的区别?

-- NOW() 返回完整的当前时间戳(包含时分秒)
SELECT NOW();  -- 2025-09-03 14:30:25.123-- TODAY() 返回当前日期的0点时间戳
SELECT TODAY();  -- 2025-09-03 00:00:00.000

Q2: 如何处理时区问题?

-- TDengine 中的时间戳通常是UTC时间
-- 需要在应用层进行时区转换
-- 或使用时区相关函数进行处理

Q3: 在INSERT语句中使用NOW()的最佳实践?

-- 对于实时数据,推荐使用NOW()
INSERT INTO sensor_001 VALUES (NOW(), 25.6, 60.8);-- 对于批量导入历史数据,使用具体时间戳
INSERT INTO sensor_001 VALUES ('2025-09-03 10:00:00', 25.1, 60.2),('2025-09-03 10:01:00', 25.3, 60.5);

Q4: NOW()在WHERE子句中的优化?

-- 对于频繁查询,可以预先计算时间边界
SET @start_time = NOW() - 1h;
SET @end_time = NOW();SELECT * FROM sensor_001 
WHERE ts BETWEEN @start_time AND @end_time;

总结

NOW() 函数是 TDengine 中非常重要的时间函数,特别适用于:

  • 实时数据插入和时间戳记录
  • 时间范围查询和数据过滤
  • 时间差计算和数据分析
  • 实时监控和报警系统

正确使用 NOW() 函数可以大大提高时序数据处理的效率和准确性。在实际应用中,需要注意时间精度、性能优化和时区处理等方面的问题。

关于 TDengine

TDengine 是一款专为物联网、工业互联网等场景设计并优化的大数据平台,其核心模块是高性能、集群开源、云原生、极简的时序数据库。

它能安全高效地将大量设备每天产生的高达 TB 甚至 PB 级的数据进行汇聚、存储、分析和分发,并提供 AI 智能体对数据进行预测与异常检测,提供实时的商业洞察。

http://www.xdnf.cn/news/19907.html

相关文章:

  • Ubuntu环境下的 RabbitMQ 安装与配置详细教程
  • RabbitMQ篇
  • 20250903的学习笔记
  • LangChain实战(十三):Agent Types详解与选择策略
  • 动态IP和静态IP配置上有什么区别
  • 单片机控制两只直流电机正反转C语言
  • 如何保存训练的最优模型和使用最优模型文件
  • 【wpf】WPF开发避坑指南:单例模式中依赖注入导致XAML设计器崩溃的解决方案
  • SpringBoot注解生效原理分析
  • AI落地新趋势:美林数据揭示大模型与小模型的协同进化论
  • Java中 String、StringBuilder 和 StringBuffer 的区别?
  • 小皮80端口被NT内核系统占用解决办法
  • 期货反向跟单—从小白到高手的进阶历程 七(翻倍跟单问题)
  • 【Java】对于XML文档读取和增删改查操作与JDBC编程的读取和增删改查操作的有感而发
  • 加解密安全-侧信道攻击
  • Python分布式任务队列:万级节点集群的弹性调度实践
  • Unity 枪械红点瞄准器计算
  • linux内核 - 服务进程是内核的主要责任
  • dockerfile文件的用途
  • 机器能否真正语言?人工智能NLP面临的“理解鸿沟与突破
  • 键盘上面有F3,四,R,F,V,按下没有反应,维修记录
  • Echo- Go Web Framework的介绍
  • MCP over SSE 通信过程详解:双通道架构下的高效对话
  • 关于牙科、挂号、医生类小程序或管理系统项目 项目包含微信小程序和pc端两部分
  • 《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(1)
  • createrepo生成yum仓库元数据xml文件
  • 【机器学习学习笔记】逻辑回归实现与应用
  • 微信小程序预览和分享文件
  • AI生成内容的版权迷局:GPT-4输出的“创意”版权风险与规避之道
  • 解决服务器 DNS 解析失败,从这几步排查开始