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
英文地址,請注明出處:http://en.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;表示該“如何做”。 操作系…