PG實踐|內置函數之GENERATE_SERIES之深入理解(二)

📫 作者簡介:「六月暴雪飛梨花」,專注于研究Java,就職于科技型公司后端工程師
🏆 近期榮譽:華為云云享專家、阿里云專家博主、騰訊云優秀創作者、ACDU成員
🔥 三連支持:歡迎 ??關注、👍點贊、👉收藏三連,支持一下博主~

文章目錄

  • 背景
  • 1GENERATE_SERIES
    • 1.1 釋義
    • 1.2 用法
      • 1.2.1 日期類型加減法
      • 1.2.2 時間戳類型加減法
      • 1.2.3 在時空下的日期時間加減法
  • 總結

背景

接著上一篇,這次繼續深入聊聊 GENERATE_SERIES 這個函數的其他用法,由于最近一直忙于工作,也沒得時間來深入學習、使用這個函數,每次都是潦草學習,終不得要領,所以得閑的時候就來寫一寫,學習一下。
近期在做一些數據處理的工作,工作中使用其他項目組平臺來做數據開發,在數據開發過程中,使用了PostgreSQL的一個內置函數 GENERATE_SERIES。在使用過程中遇到問題,一般都是站在巨人的肩膀學習即可,也無需動腦子,慢慢的成了拿來主義者。
閑話家常里短這里就不拉了,繼續上一篇的學習,下面開始吧。

1GENERATE_SERIES

1.1 釋義

【函數釋義】:數據集函數,按照一定參數規則返回數據集。主要用于生成示例數據或一些有規律的記錄,generate_series允許您生成一組從某個點開始,到另一個點結束的數據,并可選擇設置遞增值。

當前測試(實驗)環境為PostgreSQL 16.2,所有操作均以這個版本進行測試(這個后續會有說明)。
在這里插入圖片描述

1.2 用法

上一篇也說過,在PostgreSQL的官網有如下三種的用法和描述(integer、bigint、numeric),可以借鑒下上一篇,這里說下日期類型參數。

【語法結構】

generate_series ( start timestamp, stop timestamp, step interval ) →
setof timestamp

generate_series ( start timestamp with time zone, stop
timestamp with time zone, step interval [, timezone text ] ) → setof
timestamp with time zone

【參數】
在處理日期類型時,可以將日期轉換為整數類型計算,也可以按照日期類型來計算。

【應用場景】
PostgreSQL中的 generate_series 函數是一個非常強大且靈活的工具,它可以在多種應用場景中生成連續的序列。

  1. 生成整數序列:上文已經講述。
  2. 生成時間序列:本篇重點講述。
  3. 生成IP地址序列:雖然generate_series函數本身不直接支持IP地址的生成,但可以通過一些技巧(如將IP地址轉換為整數進行計算后再轉換回IP地址)來間接實現。
  4. 模擬測試數據:在應用功能數據庫開發或測試階段,經常需要生成大量的測試數據。generate_series可以方便地生成連續的整數或時間序列,用于填充測試表。
  5. 批量更新或處理數據:generate_series可以與UPDATE、DELETE等語句結合使用,實現復雜的批量操作。
  6. 報表和數據分析:generate_series可以生成一個連續的時間或數值序列,用于與數據表進行連接(JOIN)操作,從而方便地進行分組和聚合。

1.2.1 日期類型加減法

在當前日期上按照一定的數值序列進行加減法,例如當前時間為 2024-07-02,從 0 (當前日期基數)開始,按照步長 1 向上增加(具體的邏輯可以參考下上一篇,邏輯相同,這里主要是借助了generate_series函數自增的特性,如果從 1 開始,那么就不算當前日期)。
2024-07-02
2024-07-03
2024-07-04
2024-07-05
2024-07-06
2024-07-07 ,不符合在數據集內,所以舍去,那么這個時間結果集就為上述所示。
在這里插入圖片描述

【代碼示例】

-- 在當前日期上增加數值
SELECT current_date + gs.serial_num AS dates FROM generate_series(0,4,1) AS gs(serial_num);

其他例子也挺好,可以根據自身需求來設置或制作可以使用的參數,具體可以參考如下:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

-- 在參數日期上增加數值(如果是在Navicat中可以執行,其他工具酌情處理修改后執行)
SELECT (CAST([${year_time}] as date) + gs.serial_num) AS dates FROM generate_series(0,4,1) AS gs(serial_num);-- 可以在查詢時直接應用數據集
SELECT generate_series('2024-07-02'::date, '2024-12-31'::date, '1 month'::interval);-- 寫法不限制,怎么寫都是可以的,例如下面的方式
SELECT generate_series(CURRENT_DATE,  CURRENT_DATE + INTERVAL '6 days',  INTERVAL '1 day');

1.2.2 時間戳類型加減法

時間戳上數值加減法,這里利用了日期的周期性。例如從開始時間戳到結束時間戳,按照某一個周期進行加減法。從 2024-07-02 00:00 到 2024-07-10 00:00,按照步長 1 day 的周期進行增加后的結果如下:
從 2024-07-02 00:00:00 開始,判斷在數據集內,羅列結果:
2024-07-02 00:00:00
2024-07-03 00:00:00
2024-07-04 00:00:00
2024-07-05 00:00:00
2024-07-06 00:00:00
2024-07-07 00:00:00
2024-07-08 00:00:00
2024-07-09 00:00:00
2024-07-10 00:00:00
2024-07-11 00:00:00 ,不符合在數據集內,所以舍去,那么這個時間結果集就為上述所示。
在這里插入圖片描述
在這里插入圖片描述

-- 時間戳上數值加減法(這里按照天計算),這里利用了日期的周期性
SELECT * FROM generate_series('2024-07-02 00:00'::timestamp, '2024-07-10 00:00', '1 day');-- 時間戳上數值加減法(這里按照月計算)
SELECT * FROM generate_series('2024-07-02 00:00'::timestamp, '2024-10-10 00:00', '1 MONTH');

當然可以根據時間周期性計算 年、月、日、時、分、秒,關鍵字分別為:year、month、day、hour、minute、seconds,如果沒有特別設置,不區分大小寫,雖然偶爾寫,有些時間也難記住這些單詞,這里就不再贅述。

1.2.3 在時空下的日期時間加減法

生成從開始到停止的一系列值,步長為步長。在時區感知形式中,根據時區參數命名的時區計算一天中的時間和夏令時調整,如果省略,則根據當前的時區設置計算。一般情形下,這種使用方法很少,除非這是一些跨國業務需要處理。

SELECT * FROM generate_series(‘2024-07-02 08:00 -10:00’::timestamptz,
‘2024-07-08 10:00 -1:00’::timestamptz,
‘1 day’::interval, ‘Asia/Chungking’);

注意??
1、如果不知道如何獲取時區,可以查詢系統中已有的時區列表,默認情況下是使用UTC。

SELECT name FROM pg_timezone_names ORDER BY name;-- 部分數據如下
……
-- 重慶
Asia/Chongqing
Asia/Chungking
-- 香港
Asia/Hong_Kong
-- 澳門
Asia/Macau
-- 上海
Asia/Shanghai
-- 臺北
Asia/Taipei
……

2、在時間區間中使用的是 12H 制度,也就是我們常說的AP和PM。

總結

遇事不要慌,多看看官網,多找找原因,實在不行多翻一翻其他的博文,總有能幫助你的那一刻。下一篇總結下其他參數的使用方法。


[引用]

  1. PostgreSQL 16(generate_series):https://www.postgresql.org/docs/16/functions-srf.html
  2. PostgreSQL 12(generate_series):https://www.postgresql.org/docs/12/functions-srf.html

歡迎關注博主 「六月暴雪飛梨花」 或加入【六月暴雪飛梨花社區】一起學習和分享Linux、C、C++、Python、Matlab,機器人運動控制、多機器人協作,智能優化算法,濾波估計、多傳感器信息融合,機器學習,人工智能等相關領域的知識和技術。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39378.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39378.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39378.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

#LinuxC高級 筆記二

makefile gcc gdb makefile 1. 分文件編程 1.1 源文件&#xff1a;.c結尾的文件 包含main函數的.c 包含子函數的.c 1.2 頭文件&#xff1a;.h結尾的文件 頭文件、宏定義、typedef 、結構體、共用體、枚舉、函數聲明 include引用時“”和<>的區別&#xff1a; <>去系…

Java:JDK、JRE和JVM 三者關系

文章目錄 一、JDK是什么二、JRE是什么三、JDK、JRE和JVM的關系 一、JDK是什么 JDK&#xff08;Java Development Kit&#xff09;&#xff1a;Java開發工具包 JRE&#xff1a;Java運行時環境開發工具&#xff1a;javac&#xff08;編譯工具&#xff09;、java&#xff08;運行…

23432443

c語言中的小小白-CSDN博客c語言中的小小白關注算法,c,c語言,貪心算法,鏈表,mysql,動態規劃,后端,線性回歸,數據結構,排序算法領域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 給大家分享一句我很喜歡我話&#xff1a; 知不足而奮進&#xff0c;望遠山而前行&am…

聚四氟乙烯消解管/PTFE四氟消化管/配套各廠家石墨消解儀

四氟消解瓶&#xff0c;通常指的是采用聚四氟乙烯&#xff08;PTFE&#xff0c;也稱為特氟龍或鐵氟龍&#xff09;材料制成的實驗室消解容器。 以下是關于四氟消解瓶的一些基本信息&#xff1a; 材質特性&#xff1a; 四氟消解瓶由PTFE材料制成&#xff0c;具有極佳的耐腐蝕…

Python腳本:將Word文檔轉換為Excel文件

引言 在文檔處理中&#xff0c;我們經常需要將Word文檔中的內容轉換成其他格式&#xff0c;如Excel&#xff0c;以便更好地進行數據分析和報告。針對這一需求&#xff0c;我編寫了一個Python腳本&#xff0c;能夠批量處理指定目錄下的Word文檔&#xff0c;將其內容結構化并轉換…

PTrade如何獲取技術值班?如get_RSI - 相對強弱指標;PTrade量化軟件如何獲取?

get_RSI - 相對強弱指標 get_RSI(close, n6) 使用場景 該函數僅在回測、交易模塊可用 接口說明 獲取相對強弱指標RSI指標的計算結果 PTrade是恒生公司開發的一款專業量化軟件&#xff0c;部分合作券商可提供&#xff0c;↑↑↑&#xff01; 參數 close&#xff1a;價格…

.NET發布成單個文件后獲取不到程序所在路徑的問題

.net程序不發布成單個文件&#xff0c;所以運行都是正常的&#xff0c;但是發布成單個文件后發現使用&#xff1a; var basePath Path.GetDirectoryName((System.Reflection.Assembly.GetExecutingAssembly().Location)); 獲取不到應用程序所在的路徑了。 找一下幾個獲取本程…

從混亂到有序:企業級在線文檔助力中小企業數字化轉型的蛻變

在當今數字化浪潮下&#xff0c;企業的數字化轉型已成為行業發展的必然趨勢。他們數字化轉型的痛點在哪里&#xff1f;資金有限、技術人才短缺和管理的復雜性等。很多時候&#xff0c;它們的文件管理比較混亂&#xff0c;大量的知識和數據分散在不同的系統&#xff0c;形成了數…

一篇文章了解URI

1、Uri介紹 在現代網絡應用中&#xff0c;URI&#xff08;Uniform Resource Identifier&#xff0c;統一資源標識符&#xff09;是一個重要的概念。URI用于標識互聯網上的資源&#xff0c;無論是一個網頁、一張圖片、還是一個視頻文件&#xff0c;URI都可以唯一地指向這些資源。…

Docker 常見容器 第三方鏡像地址 Docker國內鏡像 docker國內鏡像 docker鏡像

Docker 常見容器 第三方鏡像地址 Docker國內鏡像 docker國內鏡像 docker鏡像 Docker 常見容器 第三方鏡像地址 Docker國內鏡像 docker國內鏡像 docker鏡像1、MySQL2、Redis3、Redis-Stack4、Redis-Stack-Server5、ElasticSearch6、Kibana7、ElasticSearch-Head8、Nginx9、Rabbi…

Web后端開發概述環境搭建項目創建servlet生命周期

Web開發概述 web開發指的就是網頁向后再讓發送請求,與后端程序進行交互 web后端(javaEE)程序需要運行在服務器中 這樣前端才可以對其進行進行訪問 什么是服務器? 解釋1: 服務器就是一款軟件,可以向其發送請求,服務器會做出一個響應.可以在服務器中部署文件&#xff0c;讓…

MySQL:MySQL總結

文章目錄 MySQL思維導圖基礎實際在 Innodb 存儲引擎中&#xff0c;會用一個特殊的記錄來標識最后一條記錄&#xff0c;該特殊的記錄的名字叫 supremum pseudo-record &#xff0c;所以掃描第二行的時候&#xff0c;也就掃描到了這個特殊記錄的時候&#xff0c;會對該主鍵索引加…

OpenCV 張正友標定法(二)

文章目錄 一、簡介二、實現代碼三、實現效果參考資料一、簡介 在之前的博客OpenCV 張氏標定法中,我們沒有考慮鏡頭畸變等因素,因此計算出的內參與外參均是理想情況下的數值,而如果我們考慮到鏡頭的畸變: 我們就需要考慮使用最小二乘法最小化像素坐標的重投影誤差(上述所求…

套接字的原理和作用機制

套接字&#xff08;Socket&#xff09;是實現網絡通信的基礎&#xff0c;它提供了在網絡中進行數據傳輸的接口和機制。以下是關于套接字原理和作用機制的詳細解釋&#xff1a; 1. 套接字的基本概念 套接字&#xff1a;套接字是網絡通信的端點&#xff0c;可以理解為通信鏈路的…

重溫react-10(函數組件和類組件的ref獲取方式)

App.js的代碼 06是函數組件 07是類組件 import React, { useEffect, useRef } from react; import LearnFunction06 from ./LearnFunction06; // 函數組件和類組件的ref使用方式 import LearnFunction07 from ./LearnFunction07; // 函數組件和類組件的ref使用方式 export de…

dell服務器RAID5磁盤陣列出現故障的解決過程二——熱備盤制作與壞盤替換過程

目錄 背景方案概念全局熱備&#xff08;Global Hot Spare&#xff09;&#xff1a;獨立熱備&#xff08;Dedicated Hot Spare&#xff09;&#xff1a; 過程8號制作成熱備清除配置制作獨立熱備熱備頂替壞盤直接rebuild 更換2號盤2號熱備 注意注意事項foreign狀態要先清除配置 背…

【Mac】Boxy SVG for Mac(矢量圖編輯器)及同類型軟件介紹

軟件介紹 Boxy SVG 是一款功能強大的矢量圖形編輯器&#xff0c;專門為 macOS 平臺設計開發。它主要用于創建和編輯 SVG&#xff08;可縮放矢量圖形&#xff09;文件&#xff0c;是設計師和開發者們制作矢量圖形的理想工具。 以下是關于 Boxy SVG 的主要特點和功能&#xff1a…

Rural Access Index (RAI)農村通達指數

農村通達指數&#xff08;RAI&#xff09; 簡介 農村通達指數&#xff08;RAI&#xff09;是全球交通領域最重要的發展指標之一。它是目前可持續發展目標中唯一一個直接衡量農村通達性的指標&#xff0c;通過評估農村人口的四季道路通達性來實現。在 2015 年作為可持續發展目…

路由LLM:優化模型調用的成本與效率

引言 在最近的一些視頻和討論中&#xff0c;我們經常提到使用較便宜和較快的模型來替代一些昂貴的大型語言模型&#xff08;LLM&#xff09;。這種方法的一個主要原因是看到許多人在不必要的場合調用如GPT-4或Claude Opus等高級模型&#xff0c;從而浪費了大量資金。而事實上&…

IDEA 編譯單個Java文件

文章目錄 一、class文件的生成位置二、編譯單個文件編譯項目報錯Error:java: 無效的源發行版: 8 一、class文件的生成位置 file->project structure->Modules 二、編譯單個文件 選中文件&#xff0c;點擊recompile 編譯項目報錯 Error:java: 無效的源發行版: 8 Fi…