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/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格式…