在这里插入图片描述

TDengine TO_TIMESTAMP 函数用户使用手册

函数概述

TO_TIMESTAMP 是 TDengine 中的标量函数,用于将字符串按照指定格式转换为时间戳。该函数在数据导入、时间格式转换、以及处理各种时间字符串格式时非常有用。

语法

TO_TIMESTAMP(ts_str_literal, format_str_literal)

参数说明

  • ts_str_literal: 时间字符串,VARCHAR 类型
  • format_str_literal: 格式字符串,VARCHAR 类型,定义了时间字符串的格式

返回值

  • 数据类型: TIMESTAMP
  • 精度: 与查询表的时间精度一致,若未指定表则默认为毫秒精度

版本支持

  • 起始版本: v3.2.2.0
  • 适用范围: 表和超级表
  • 嵌套查询: 支持内层查询和外层查询

格式字符串说明

支持的格式标识符

基于源码分析,TDengine 支持以下格式标识符:

年份格式
  • YYYY/yyyy: 4位年份 (如: 2023)
  • YYY/yyy: 3位年份 (如: 023)
  • YY/yy: 2位年份 (如: 23)
  • Y/y: 1位年份 (如: 3)
月份格式
  • MM/mm: 2位月份数字 (01-12)
  • MONTH/month: 完整月份名称 (大小写不敏感)
  • MON/mon: 缩写月份名称 (大小写不敏感)
  • Month: 首字母大写的月份名称
日期格式
  • DD/dd: 2位日期 (01-31)
  • DDD/ddd: 一年中的第几天 (001-366)
  • D/d: 1位日期 (1-31)
  • DAY/day: 完整星期名称
  • DY/dy: 缩写星期名称
时间格式
  • HH24/hh24: 24小时制小时 (00-23)
  • HH12/hh12: 12小时制小时 (01-12)
  • HH/hh: 小时 (默认24小时制)
  • MI/mi: 分钟 (00-59)
  • SS/ss: 秒 (00-59)
亚秒精度格式
  • MS/ms: 毫秒 (000-999)
  • US/us: 微秒 (000000-999999)
  • NS/ns: 纳秒 (000000000-999999999)
上午/下午标识
  • AM/am/A.M./a.m.: 上午标识
  • PM/pm/P.M./p.m.: 下午标识
时区格式
  • TZH/tzh: 时区小时偏移

使用场景详解

1. 数据导入场景

当从外部系统导入数据时,时间格式可能多种多样:

-- 从 CSV 文件导入标准 ISO 格式时间
SELECT TO_TIMESTAMP('2023-10-15 14:30:25', 'YYYY-MM-DD HH24:MI:SS') as ts;-- 导入美式日期格式
SELECT TO_TIMESTAMP('10/15/2023 2:30:25 PM', 'MM/DD/YYYY HH12:MI:SS PM') as ts;-- 导入欧式日期格式
SELECT TO_TIMESTAMP('15.10.2023 14:30:25', 'DD.MM.YYYY HH24:MI:SS') as ts;

2. 日志分析场景

处理不同系统的日志时间格式:

-- Apache 日志格式
SELECT TO_TIMESTAMP('15/Oct/2023:14:30:25', 'DD/MON/YYYY:HH24:MI:SS') as log_time;-- 应用程序日志格式
SELECT TO_TIMESTAMP('2023-10-15T14:30:25.123', 'YYYY-MM-DDTHH24:MI:SS.MS') as app_time;-- 系统日志格式
SELECT TO_TIMESTAMP('Oct 15 14:30:25', 'MON DD HH24:MI:SS') as sys_time;

3. 数据清洗场景

清理和标准化不规范的时间数据:

-- 处理缺少前导零的时间
SELECT TO_TIMESTAMP('2023-1-5 9:5:5', 'YYYY-MM-DD HH24:MI:SS') as clean_time;-- 处理包含多余空格的时间
SELECT TO_TIMESTAMP(' 2023 年 - 10 月 - 15 日 ', 'YYYY 年-MM月-DD日') as chinese_time;

4. 时区处理场景

处理带时区信息的时间字符串:

-- 处理带时区偏移的时间
SELECT TO_TIMESTAMP('2023-10-15 14:30:25+08', 'YYYY-MM-DD HH24:MI:SS+TZH') as tz_time;-- 建议:为避免时区混乱,建议在时间字符串中包含时区信息
SELECT TO_TIMESTAMP('2023-10-15 14:30:25+08:00', 'YYYY-MM-DD HH24:MI:SS') as recommended;

5. 高精度时间处理场景

处理需要高精度的时间数据:

-- 纳秒精度时间戳 (需要在纳秒精度的表中查询)
SELECT TO_TIMESTAMP('2023-10-15 14:30:25.123456789', 'YYYY-MM-DD HH24:MI:SS.NS') 
FROM nano_precision_table LIMIT 1;-- 同时指定毫秒、微秒、纳秒
SELECT TO_TIMESTAMP('2023-10-15 14:30:25.123.000456.000000789', 'YYYY-MM-DD HH24:MI:SS.MS.US.NS') 
FROM nano_precision_table LIMIT 1;

实用示例

基础用法示例

-- 1. 标准 ISO 8601 格式
SELECT TO_TIMESTAMP('2023-10-15 14:30:25', 'YYYY-MM-DD HH24:MI:SS');-- 2. 带毫秒的时间
SELECT TO_TIMESTAMP('2023-10-15 14:30:25.123', 'YYYY-MM-DD HH24:MI:SS.MS');-- 3. 12小时制格式
SELECT TO_TIMESTAMP('2023-10-15 2:30:25 PM', 'YYYY-MM-DD HH12:MI:SS PM');-- 4. 月份名称格式
SELECT TO_TIMESTAMP('15-October-2023 14:30:25', 'DD-MONTH-YYYY HH24:MI:SS');

容错机制示例

-- 格式串容错:多余的字符会被忽略
SELECT TO_TIMESTAMP('200101/2', 'yyyyMM1/dd');-- 空格容错:多余的空格会被自动忽略  
SELECT TO_TIMESTAMP(' 23 年 - 1 月 - 01 日 ', 'yy 年-MM月-dd日');-- 数字位数容错:不足两位的数字也能正确解析
SELECT TO_TIMESTAMP('2023-1-1', 'YYYY-MM-DD');

高级应用示例

-- 1. 在数据插入中使用
INSERT INTO sensor_data (ts, temperature) 
VALUES (TO_TIMESTAMP('2023-10-15 14:30:25', 'YYYY-MM-DD HH24:MI:SS'), 25.6);-- 2. 在 WHERE 条件中使用
SELECT * FROM sensor_data 
WHERE ts >= TO_TIMESTAMP('2023-10-15 00:00:00', 'YYYY-MM-DD HH24:MI:SS');-- 3. 在聚合查询中使用
SELECT COUNT(*) FROM sensor_data 
WHERE ts BETWEEN TO_TIMESTAMP('2023-10-15 00:00:00', 'YYYY-MM-DD HH24:MI:SS')AND TO_TIMESTAMP('2023-10-15 23:59:59', 'YYYY-MM-DD HH24:MI:SS');-- 4. 与其他时间函数结合使用
SELECT TO_CHAR(TO_TIMESTAMP('2023-10-15 14:30:25', 'YYYY-MM-DD HH24:MI:SS'), 'YYYY年MM月DD日') as formatted_date;

注意事项和最佳实践

1. 精度处理

-- 注意:输出精度取决于查询的表
-- 在毫秒表中查询,纳秒部分会被截断
SELECT TO_TIMESTAMP('2023-10-15 14:30:25.123456789', 'YYYY-MM-DD HH24:MI:SS.NS') 
FROM millisecond_table LIMIT 1;  -- 结果:2023-10-15 14:30:25.123-- 在纳秒表中查询,保留完整精度
SELECT TO_TIMESTAMP('2023-10-15 14:30:25.123456789', 'YYYY-MM-DD HH24:MI:SS.NS') 
FROM nanosecond_table LIMIT 1;   -- 结果:2023-10-15 14:30:25.123456789

2. 字段覆盖规则

-- 如果同一字段被指定多次,后面的会覆盖前面的
SELECT TO_TIMESTAMP('2023-22-10-10', 'yyyy-yy-MM-dd');  -- 年份结果是 2022

3. 时区处理建议

-- 推荐:明确指定时区信息
SELECT TO_TIMESTAMP('2023-10-15 14:30:25+08:00', 'YYYY-MM-DD HH24:MI:SS');-- 避免:依赖默认时区可能导致混乱
SELECT TO_TIMESTAMP('2023-10-15 14:30:25', 'YYYY-MM-DD HH24:MI:SS');

4. 12小时制使用

-- 使用 AM/PM 时,小时必须是 12 小时制 (01-12)
SELECT TO_TIMESTAMP('2023-10-15 02:30:25 PM', 'YYYY-MM-DD HH12:MI:SS PM');  -- 正确
SELECT TO_TIMESTAMP('2023-10-15 14:30:25 PM', 'YYYY-MM-DD HH12:MI:SS PM');  -- 错误

错误处理

常见错误类型

  1. 格式不匹配错误 (TSDB_CODE_FUNC_TO_TIMESTAMP_FAILED_FORMAT_ERR)

    -- 错误示例:格式与字符串不匹配
    SELECT TO_TIMESTAMP('2023-10-15', 'YYYY/MM/DD');
    
  2. 时间戳错误 (TSDB_CODE_FUNC_TO_TIMESTAMP_FAILED_TS_ERR)

    -- 错误示例:非法的时间值
    SELECT TO_TIMESTAMP('2023-13-40', 'YYYY-MM-DD');
    
  3. 不支持的格式 (TSDB_CODE_FUNC_TO_TIMESTAMP_FAILED_NOT_SUPPORTED)

    -- 错误示例:使用了不支持的格式标识符
    SELECT TO_TIMESTAMP('2023-10-15', 'YYYY-QQ-DD');
    

性能优化建议

  1. 预编译格式字符串: 相同的格式字符串会被缓存,重复使用时性能更好
  2. 避免过长的格式字符串: 格式字符串有最大长度限制 (4096 字符)
  3. 批量处理: 在处理大量数据时,尽量使用批量操作而不是逐行转换

与其他时间函数的关系

-- TO_TIMESTAMP 与 TO_CHAR 是逆操作
SELECT TO_CHAR(TO_TIMESTAMP('2023-10-15', 'YYYY-MM-DD'), 'YYYY年MM月DD日');-- 与 NOW()、TODAY() 结合使用
SELECT TO_TIMESTAMP('14:30:25', 'HH24:MI:SS') + (TODAY() - TO_TIMESTAMP('00:00:00', 'HH24:MI:SS'));-- 与 TIMEDIFF 结合计算时间差
SELECT TIMEDIFF(NOW(), TO_TIMESTAMP('2023-10-15 14:30:25', 'YYYY-MM-DD HH24:MI:SS'));

总结

TO_TIMESTAMP 函数是 TDengine 中处理时间字符串转换的核心工具,支持丰富的格式选项和容错机制。合理使用该函数可以有效处理各种时间数据导入、清洗和转换需求。在使用时需要特别注意精度设置、时区处理和格式匹配,以确保数据的准确性和一致性。

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

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

相关文章

关于我司即将对商业间谍行为进行法律诉讼的通知

最后警告我司所属社交媒体中所有友商间谍:请于2025年7月26日上午十点前,自行删除我方好友,并停止通过欺诈行为(包括但不限于冒充客户等)盗取我司商业秘密的行为。十点后,我司将开始进行逐一排查&#xff0c…

【打怪升级 - 03】YOLO11/YOLO12/YOLOv10/YOLOv8 完全指南:从理论到代码实战,新手入门必看教程

引言:为什么选择 YOLO? 在目标检测领域,YOLO(You Only Look Once)系列模型一直以其高效性和准确性备受关注。作为新版本,YOLO系列的新版本总能在前辈的基础上进行了多项改进,包括更高的检测精度…

JMeter每次压测前清除全部以确保异常率准确(以黑马点评为例、详细图解)

目录 一、前言 二、未清除全部会出现的情况(以乐观锁解决超卖问题为例) 三、清除全部就能得到准确的结果 一、前言 在学习黑马点评之前我并没有接触过JMeter这个压测软件,然后在黑马点评视频中老师也是直接拿起JMeter就开始使用,所以我一直在不断搜索…

关于新学C++编程Visual Studio 2022开始,使用Cmake工具构建Opencv和SDK在VS里编译项目开发简介笔记

1. C 项目build文件夹 2. VS解决方案管理器Solution——.sln文件 3. CMake 自动化构建工具 4. SDK软件开发工具包作为初学者,从工程项目开始接触完整一套流程工具和编译,有助于快速上手。 一、C 项目build文件夹在 VS2022 中打开 C 项目后,在…

测试ppyoloe的小样本few-shot能力,10张图片精度达到69.8%

近期公司有个项目,需要解决长尾样本的问题,所以测试了一下paddlepaddle小样本的能力。 环境::T4 、ubuntu 、cuda-11.6 、py3.9、 paddlepaddle-gpu2.6.0、pip install opencv-python4.5.5.64 -i https://pypi.tuna.tsinghua.…

结构化布线系统详解

1. 结构化布线系统概述 结构化布线系统(Structured Cabling System, SCS)是一种标准化、模块化的建筑物或建筑群内信息传输基础设施,它为语音、数据、图像等多媒体业务提供了统一的物理传输介质。与传统的点对点布线方式不同,结构化布线采用层次化、标准…

【Java学习】匿名内部类的向外访问机制

目录 一、方法局部变量的访问 1.生命周期 1.1方法生命周期 1.2匿名实例生命周期 1.3生命超时性 2.变量捕获 2.1按值捕获 2.1.1值捕获优势 2.1.1.1生命及时访问 2.1.1.2线程安全 2.1.2常量值捕获优势 2.2按引用捕获 引用捕获风险 (1)生命超时访问 (2)线程不安全 …

LinkedList的模拟实现+LinkedList和ArrayList的区别

目录 LinkedList的模拟实现 什么是双向链表 增加数据 头插法: 尾插法: 指定的下标插入: 删除数据 删除双向链表中出现的第一个key 置空所有数据 LinkedList和ArrayList的区别 顺序表对应的集合类是ArrayList;链表对应的集…

Vue + WebSocket 实时数据可视化实战:多源融合与模拟数据双模式设计

在现代交通大屏项目中,实时数据的采集和可视化尤为重要。本文结合 Vue3 和 ECharts,分享一个支持多 WebSocket 数据源实时合并、模拟数据调试、自动重连的完整设计方案,帮助你快速搭建健壮的数据可视化组件。一、项目背景与核心需求实时接收多…

C#索引器、接口、泛型

以下是对提供的 C# 代码中涉及的核心知识点的梳理和总结,涵盖索引器、接口、泛型三大核心内容,以及相关实践要点:一、索引器(Indexer)索引器是一种允许类或结构体像数组一样通过[]语法访问成员的特殊成员,本…

界面组件DevExpress WPF中文教程:Grid - 如何过滤节点?

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

Excel——INDEX和MATCH傻傻分不清?

核心逻辑​先用 MATCH 找到目标姓名在表格中的 ​行号,再用 INDEX 根据行号 ​提取对应信息。就像查字典:先用拼音找到字的页码(MATCH 找行号)再翻到该页看具体解释(INDEX 取数据)​分步拆解(以…

制造业低代码平台实战评测:简道云、钉钉宜搭、华为云Astro、金蝶云·苍穹、斑斑低代码,谁更值得选?

上回聊了斑斑和简道云,不少同行私信问我其他几个低代码平台怎么样,今天就给大家来个"五大门派"终极对决! 一、先说痛点 制造业搞数字化最怕三件事: 1.钱花了没效果(大平台用不起,小工具不够用&…

Jenkins中HTML文件显示样式问题解决方案

Jenkins中HTML文件显示样式问题解决方案 问题描述 在Jenkins中归档的HTML文件显示格式失效,样式无法正常显示,但在本地浏览器中打开却能正常显示。 问题原因 Jenkins为了安全考虑,默认设置了严格的内容安全策略(Content Security Policy, CSP…

四、配置文件

文章目录1. 文件类型1.1 properties1.2 yaml1.2.1 简介1.2.2 基本语法1.2.3 数据类型1.2.4 示例2. 配置提示1. 文件类型 1.1 properties 同以前的properties的用法 1.2 yaml 1.2.1 简介 YAML 是 “YAML Ain’t Markup Language”(YAML 不是一种标记语言&#x…

Python常用医疗AI库以及案例解析(场景化进阶版)

📊 框架应用拓扑图用例 #mermaid-svg-lZ1J5KCaVWBV2kAu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-lZ1J5KCaVWBV2kAu .error-icon{fill:#552222;}#mermaid-svg-lZ1J5KCaVWBV2kAu .error-text{fill:#552222;st…

Python高效操作Kafka实战指南

Python操作Kafka的高效 以下是使用Python操作Kafka的高效消息发送实例,涵盖基础发送、批量处理、异步回调等场景。示例基于confluent-kafka库(推荐)和kafka-python库,代码均经过实测。 流程图 基础消息发送(同步) from confluent_kafka import Producerproducer = Pro…

离线快速处理PDF格式转化的方案

日常办公中,PDF 几乎成了我们离不开的文件格式。然而像 WPS 这样的工具,不少实用功能都需要额外付费才能解锁。它的打开方式很简单,双击桌面图标即可运行。它不会弹出主界面,而是默默驻留在系统托盘区,需要时双击图标就…

SpringMVC注解与SpringCloudOpenFeign注解对比

1. 背景知识 梳理SpringMVC和SpringCloudOpenFeign常用注解后: Spring MVC中常用注解_笔记-CSDN博客Spring Cloud OpenFeign 常用注解_笔记-CSDN博客 这里对两类注解做个对比。理解两者定位(服务端 vs 客户端)是掌握注解使用的关键&#x…

Linux 时间同步的流程

一、问题时间RTC时间、系统时间(UTC)和本地时间的关系如下:‌RTC时间‌(硬件时钟):显示为UTC时间格式:02:50:35/02:51:28由主板电池供电,独立于系统运行‌12通常存储UTC时间(Linux默认配置&…