TDengine 轉化函數 TO_TIMESTAMP 用戶手冊

在這里插入圖片描述

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默認配置&…