[Oracle數據庫] Oracle 常用函數

目錄

一、先搞懂這些基礎約定

二、數值函數:處理數字的 “小幫手”

1??MOD (n1, n2):取余數

2??ROUND (n1 [, n2]):四舍五入

3??TRUNC (n1 [, n2]):截斷(不四舍五入)

其他常用數值函數

三、字符型函數:字符串處理的 “利器”

1??大小寫轉換:LOWER (c) 與 UPPER (c)

2??字符串填充:LPAD (c1, n [, c2]) 與 RPAD (c1, n [, c2])

3??去除首尾字符:TRIM、LTRIM、RTRIM

4??字符串替換:REPLACE (c1, c2 [, c3])

5??字符串截取:SUBSTR (c1, n1 [, n2])

其他常用字符函數

四、日期函數:玩轉時間的 “魔法”

1??獲取當前時間:SYSDATE 與 CURRENT_DATE

2??日期加減:ADD_MONTHS (d, n)

3??月份相關:LAST_DAY 與 MONTHS_BETWEEN

4??查找下一個星期幾:NEXT_DAY (d, n)

5??日期舍入與截斷:ROUND (d [, fmt]) 與 TRUNC (d [, fmt])

五、轉換函數:數據類型的 “轉換器”

1??TO_CHAR:將其他類型轉為字符串

2??TO_DATE:將字符串轉為日期

3??TO_NUMBER:將字符串轉為數值

六、其他輔助函數:實用工具集合

1??DECODE:增強型 “if-else”

2??NVL 與 NVL2:處理 NULL 值

3??GREATEST 與 LEAST:取最大 / 最小值


在 Oracle 數據庫操作中,函數是簡化數據處理、提升查詢效率的重要工具。無論是數值計算、字符串處理,還是日期轉換,掌握常用函數能讓你在 SQL 編寫中事半功倍。

一、先搞懂這些基礎約定

在學習函數前,先明確 PPT 中的通用約定,幫你快速理解函數參數:

  • N:表示數字型參數(如整數、小數)
  • C:表示字符型參數(如字符串)
  • D:表示日期型參數(如系統時間、自定義日期)
  • []:括號內的參數為可選參數(可省略)
  • fmt:表示格式符(用于指定日期、數值的轉換格式)
  • ||:表示 “任選其一”(如LEADING||TRAILING表示選LEADINGTRAILING

二、數值函數:處理數字的 “小幫手”

數值函數用于對數字型數據進行計算或處理,返回結果仍為數字。以下是最常用的幾個:

1??MOD (n1, n2):取余數

  • 功能:返回n1除以n2的余數;若n2=0,則直接返回n1
  • 示例:

    sql

    SELECT MOD(24, 5) FROM DUAL; -- 24÷5余4,結果為4
    SELECT MOD(10, 0) FROM DUAL; -- n2=0,返回n1,結果為10
    

2??ROUND (n1 [, n2]):四舍五入

  • 功能:將n1四舍五入到小數點后n2位;n2默認值為 0(即四舍五入為整數);若n2為負數,則舍入到小數點左側對應位數。
  • 示例:

    sql

    SELECT ROUND(23.56),      -- n2默認0,四舍五入為整數,結果24ROUND(23.56, 1),   -- 保留1位小數,結果23.6ROUND(23.56, -1)   -- 舍入到十位(左側1位),結果20
    FROM DUAL;
    

3??TRUNC (n1 [, n2]):截斷(不四舍五入)

  • 功能:將n1截斷到小數點后n2位(直接去掉多余位數,不四舍五入);n2默認 0(截斷為整數);n2為負數時,截斷到小數點左側對應位數。
  • 與 ROUND 的區別:TRUNC 是 “硬截斷”,ROUND 是 “四舍五入”。
  • 示例:

    sql

    SELECT TRUNC(23.56),      -- 截斷為整數,結果23TRUNC(23.56, 1),   -- 保留1位小數,結果23.5TRUNC(23.56, -1)   -- 截斷到十位,結果20
    FROM DUAL;
    

其他常用數值函數

函數功能示例
ABS(n)返回 n 的絕對值ABS(-100) → 100
CEIL(n)返回大于等于 n 的最小整數CEIL(18.2) → 19CEIL(-18.2) → -18
FLOOR(n)返回小于等于 n 的最大整數FLOOR(2.2) → 2FLOOR(-2.2) → -3
SQRT(n)返回 n 的平方根(n≥0)SQRT(9) → 3

三、字符型函數:字符串處理的 “利器”

字符型函數用于對字符串(CHARVARCHAR2等類型)進行轉換、截取、替換等操作,返回結果多為字符串。

1??大小寫轉換:LOWER (c) 與 UPPER (c)

  • LOWER(c):將字符串c中所有字符轉為小寫。
  • UPPER(c):將字符串c中所有字符轉為大寫。
  • 示例:

    sql

    SELECT LOWER('WhaT is tHis') FROM DUAL; -- 結果:'what is this'
    SELECT UPPER('WhaT is tHis') FROM DUAL; -- 結果:'WHAT IS THIS'
    

2??字符串填充:LPAD (c1, n [, c2]) 與 RPAD (c1, n [, c2])

  • 功能:將字符串c1處理為長度為n的新字符串,不足時用指定字符補充(默認用空格),超出時截斷。
  • 區別:LPAD從左側補充,RPAD從右側補充。
  • 規則:
    • n < c1的長度:從左(LPAD)或右(RPAD)截斷到n位。
    • n > c1的長度:c2不為空時用c2補充,為空時用空格補充。
  • 示例:

    sql

    -- LPAD示例:原字符串為'WhaT is tHis'(長度11)
    SELECT LPAD('WhaT is tHis', 5),       -- n=5 < 11,左側截斷5位 → 'WhaT 'LPAD('WhaT is tHis', 25),      -- n=25 > 11,用空格左側補充至25位LPAD('WhaT is tHis', 25, '-')  -- 用'-'左側補充至25位 → '--------------WhaT is tHis'
    FROM DUAL;
    

3??去除首尾字符:TRIM、LTRIM、RTRIM

這三個函數都用于移除字符串中的指定字符,但適用場景不同:

  • TRIM([[LEADING|TRAILING|BOTH] c2 FROM] c1):

    • 功能:移除c1中首尾的c2c2必須是單個字符)。
    • 可選參數:
      • LEADING:只移除左側的c2
      • TRAILING:只移除右側的c2
      • BOTH(默認):移除兩側的c2
      • 若不指定c2:默認移除首尾空格。
    • 示例:

      sql

      SELECT TRIM(' WhaT is tHis '), -- 移除首尾空格 → 'WhaT is tHis'TRIM('W' FROM 'WhaT is tHis w W'), -- 移除兩側'W' → 'haT is tHis w 'TRIM(LEADING 'W' FROM 'WhaT is tHis w W') -- 只移除左側'W' → 'haT is tHis w W'
      FROM DUAL;
      
  • LTRIM(c1[, c2]):移除c1左側所有與c2匹配的字符(c2可以是多個字符),默認移除左側空格。

    • 示例:LTRIM('WWhhhhhaT is tHis', 'Wh')?→ 移除左側所有 'W' 和 'h',結果為'aT is tHis'
  • RTRIM(c1[, c2]):與 LTRIM 類似,但移除右側匹配字符。

    • 示例:RTRIM('WhaT is tHis w W', 'W w')?→ 移除右側所有 'W'、' '、'w',結果為'WhaT is tHis'

4??字符串替換:REPLACE (c1, c2 [, c3])

  • 功能:將c1中所有c2替換為c3;若c3為空,則刪除所有c2
  • 示例:

    sql

    SELECT REPLACE('WWhhhhhaT', 'W', '-'), -- 將'W'替換為'-' → '--hhhhhaT'REPLACE('WWhhhhhaT', 'h')       -- 不指定c3,刪除所有'h' → 'WWhaT'
    FROM DUAL;
    

5??字符串截取:SUBSTR (c1, n1 [, n2])

  • 功能:從c1n1位置開始,截取長度為n2的子串(n2默認截取到末尾)。
  • 關鍵規則:
    • n1=0:等價于n1=1(從第一個字符開始);
    • n1>0:從左向右數第n1位開始;
    • n1<0:從右向左數第|n1|位開始;
    • n1超過c1長度:返回空。
  • 示例:

    sql

    SELECT SUBSTR('What is this', 5, 3), -- 從左數第5位開始,取3位 → 'is 'SUBSTR('What is this', -5, 3), -- 從右數第5位開始,取3位 → 'thi'SUBSTR('What is this', 50, 3)  -- n1超出長度,返回空
    FROM DUAL;
    

其他常用字符函數

函數功能示例
LENGTH(c)返回字符串 c 的長度(包括空格)LENGTH('A123中') → 5(1 個字母 + 2 個數字 + 1 個漢字)
INSTR(c1, c2[, n1[, n2]])返回c2c1中第n2次出現的位置(n1為起始查找位置,正數從左,負數從右)INSTR('abcdefg', 'e', -3) → 5(從右數第 3 位開始找 'e',位置為 5)

四、日期函數:玩轉時間的 “魔法”

日期函數用于處理日期型數據(如獲取當前時間、計算日期差等),返回結果多為日期或數值。

1??獲取當前時間:SYSDATE 與 CURRENT_DATE

  • 功能:均返回當前會話所在時區的系統時間。
  • 細微區別:特殊情況下,CURRENT_DATE可能比SYSDATE快 1 秒(因時區處理機制不同)。
  • 示例:

    sql

    SELECT SYSDATE, CURRENT_DATE FROM DUAL; -- 通常返回相同時間,格式為默認日期格式
    

2??日期加減:ADD_MONTHS (d, n)

  • 功能:返回日期d加上n個月后的日期(n可為負數,即減月份)。
  • 示例:

    sql

    SELECT ADD_MONTHS(SYSDATE, 12),  -- 當前時間加12個月(1年后)ADD_MONTHS(SYSDATE, -3)   -- 當前時間減3個月(3個月前)
    FROM DUAL;
    

3??月份相關:LAST_DAY 與 MONTHS_BETWEEN

  • LAST_DAY(d):返回d所在月份的最后一天。
    • 示例:LAST_DAY(SYSDATE)?→ 若當前是 2024-08-15,返回 2024-08-31。
  • MONTHS_BETWEEN(d1, d2):返回d1d2之間的月份差(d1>d2為正,反之為負)。
    • 示例:MONTHS_BETWEEN(SYSDATE, ADD_MONTHS(SYSDATE, -1)) → 1(相差 1 個月)。

4??查找下一個星期幾:NEXT_DAY (d, n)

  • 功能:返回d之后第一個星期n的日期(n可為數字 1-7 或星期的中文名稱)。
  • 注意:n的格式必須與當前會話的默認星期格式一致(如中文環境下用 “星期四”,不能用 “Thursday”)。
  • 示例:

    sql

    SELECT NEXT_DAY(SYSDATE, 5),    -- 5表示星期五(不同環境可能有差異,建議用中文)NEXT_DAY(SYSDATE, '星期四') -- 直接用中文“星期四”更穩妥
    FROM DUAL;
    

5??日期舍入與截斷:ROUND (d [, fmt]) 與 TRUNC (d [, fmt])

  • 功能與數值型的ROUNDTRUNC類似,但操作對象是日期,fmt指定舍入 / 截斷的單位(如'HH24'表示小時)。
  • 示例:

    sql

    SELECT ROUND(SYSDATE, 'HH24'),  -- 舍入到最近的小時(如15:30→16:00,15:29→15:00)TRUNC(SYSDATE, 'HH24')   -- 截斷到當前小時(如15:30→15:00)
    FROM DUAL;
    

五、轉換函數:數據類型的 “轉換器”

轉換函數用于在不同數據類型(如字符、日期、數值)之間轉換,是 Oracle 中最常用的函數之一。

1??TO_CHAR:將其他類型轉為字符串

  • 功能:可將日期、數值或字符型數據轉為VARCHAR2類型,支持自定義格式。
  • 三種用法:
    • 轉換日期為字符串:TO_CHAR(d[, fmt])fmt指定日期格式(如'yyyy-mm-dd hh24:mi:ss')。
      • 示例:TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') → '2024-08-15 14:30:25'
    • 轉換數值為字符串:TO_CHAR(n[, fmt])fmt可指定貨幣符號、千位分隔符等。
      • 示例:TO_CHAR(-100, 'L99G999D99MI') → '¥ 100.00-'(L 為本地貨幣符號,G 為千位分隔符,D 為小數點,MI 表示負數在右側加 '-')。
    • 轉換字符為字符:TO_CHAR(c),將其他字符類型(如CLOB)轉為CHAR

2??TO_DATE:將字符串轉為日期

  • 功能:將字符串cfmt格式轉為日期類型(DATE)。
  • 注意:fmt必須與c的格式一致,否則會報錯。
  • 特殊格式:若fmt='J',則c必須是 Julian 日(公元制天數,1 表示公元前 4712 年 1 月 1 日)。
  • 示例:

    sql

    SELECT TO_DATE('2007-8-23 23:25:00', 'yyyy-mm-dd hh24:mi:ss'), -- 按指定格式轉換TO_DATE(2454336, 'J') -- Julian日轉換(結果為2008-01-01左右)
    FROM DUAL;
    

3??TO_NUMBER:將字符串轉為數值

  • 功能:將字符串cfmt格式轉為數值類型(NUMBER)。
  • 示例:

    sql

    SELECT TO_NUMBER('-100.00', '9G999D99'), -- 按格式轉換 → -100TO_NUMBER('00000100.00')          -- 自動忽略前導0 → 100
    FROM DUAL;
    

六、其他輔助函數:實用工具集合

這些函數雖不常用,但在特定場景下能大幅簡化代碼,值得掌握。

1??DECODE:增強型 “if-else”

  • 功能:類似多條件判斷,語法為DECODE(exp, s1, r1, s2, r2, ..., def)
  • 邏輯:若exp = s1則返回r1,若exp = s2則返回r2…… 否則返回默認值def(無def則返回空)。
  • 示例:

    sql

    SELECT DECODE('a2', 'a1', 'true1', 'a2', 'true2', 'default') FROM DUAL; -- 結果:'true2'
    

2??NVL 與 NVL2:處理 NULL 值

  • NVL(c1, c2):若c1NULL,則返回c2;否則返回c1
    • 示例:NVL(NULL, '12') → '12'NVL('a', 'b') → 'a'
  • NVL2(c1, c2, c3):若c1不為NULL,返回c2;否則返回c3
    • 示例:NVL2('a', 'b', 'c') → 'b'NVL2(NULL, 'b', 'c') → 'c'

3??GREATEST 與 LEAST:取最大 / 最小值

  • GREATEST(n1, n2, ...):返回參數中的最大值。
    • 示例:GREATEST(15, 5, 75, 8) → 75
  • LEAST(n1, n2, ...):返回參數中的最小值。
    • 示例:LEAST(15, 5, 75, 8) → 5

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

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

相關文章

Pytorch模型復現筆記-STN(空間注意力Transformer網絡)講解+架構搭建(可直接copy運行)+ MNIST數據集視角調整實驗

Spatial Transformer Networks 本文了講述STN的基本架構&#xff0c;空間幾何注意力模塊的基本原理&#xff0c;冒煙測試以及STN在MNIST數據集用于模型自動調整圖片視角的實驗&#xff0c;如果大家有不懂或者發現了錯誤的地方&#xff0c;歡迎討論。 中文名&#xff1a;空間Tra…

【LeetCode】16. 最接近的三數之和

文章目錄16. 最接近的三數之和題目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a;解題思路算法分析問題本質分析排序雙指針法詳解雙指針移動策略搜索過程可視化各種解法對比算法流程圖邊界情況處理時間復雜度分析空間復雜度分析關鍵優化點實際應用場景測試用例設計…

微信小程序實現藍牙開啟自動播放BGM

下面是一個完整的微信小程序實現方案&#xff0c;當藍牙設備連接時自動播放背景音樂(BGM)。實現思路監聽藍牙設備連接狀態當檢測到藍牙設備連接時&#xff0c;自動播放音樂當藍牙斷開時&#xff0c;停止音樂播放處理相關權限和用戶交互完整代碼實現1. 項目結構text/pages/index…

XML 序列化與操作詳解筆記

一、XML 基礎概念XML&#xff08;eXtensible Markup Language&#xff0c;可擴展標記語言&#xff09;是一種用于存儲和傳輸數據的標記語言&#xff0c;由 W3C 制定&#xff0c;具有以下特點&#xff1a;可擴展性&#xff1a;允許自定義標記&#xff08;如<Student>、<…

第八十四章:實戰篇:圖 → 視頻:基于 AnimateDiff 的視頻合成鏈路——讓你的圖片“活”起來,瞬間擁有“電影感”!

AI圖生視頻前言&#xff1a;從“剎那永恒”到“動態大片”——AnimateDiff&#xff0c;讓圖片“活”起來&#xff01;第一章&#xff1a;痛點直擊——靜態圖像到視頻&#xff0c;不是“幻燈片”那么簡單&#xff01;第二章&#xff1a;探秘“時間魔法”&#xff1a;AnimateDiff…

2025深大計算機考研復試經驗貼(已上岸)

如果你在初試出分前看到此貼 我建議&#xff1a; 準備機試和簡歷&#xff0c;即使你不估分&#xff1a;因為如果要準備春招的話&#xff0c;也總要刷題和做簡歷的。盡早估分&#xff0c;查一下往年的復試線&#xff0c;如果有望進復試&#xff0c;可盡早開始準備。 Preface …

用Pygame開發桌面小游戲:從入門到發布

一、引言 Pygame是一個基于Python的跨平臺游戲開發庫,它提供了簡單易用的圖形、聲音和輸入處理功能,非常適合新手入門游戲開發。本文將以"經典游戲合集"項目為例,帶你一步步了解如何使用Pygame開發、打包和發布自己的桌面小游戲。 二、開發環境搭建 安裝Python:…

CSS backdrop-filter:給元素背景添加模糊與色調的高級濾鏡

在現代網頁設計中&#xff0c;半透明元素搭配背景模糊效果已成為流行趨勢 —— 從毛玻璃導航欄、模態框遮罩&#xff0c;到卡片懸停效果&#xff0c;這種設計能讓界面更具層次感和高級感。實現這一效果的核心 CSS 屬性&#xff0c;正是backdrop-filter。它能對元素背后的內容&a…

檢索增強生成(RAG) 緩存增強生成(CAG) 生成中檢索(RICHES) 知識庫增強語言模型(KBLAM)

以下是當前主流的四大知識增強技術方案對比&#xff0c;涵蓋核心原理、適用場景及最新發展趨勢&#xff0c;為開發者提供清晰的技術選型參考&#xff1a; &#x1f50d; 一、RAG&#xff08;檢索增強生成&#xff09;?? 核心原理?&#xff1a; 動態檢索外部知識庫&#xff0…

LLM(大語言模型)的工作原理 圖文講解

目錄 1. 條件概率&#xff1a;上下文預測的基礎 2. LLM 是如何“看著上下文寫出下一個詞”的&#xff1f; 補充說明&#xff08;重要&#xff09; &#x1f4cc; Step 1: 輸入處理 &#x1f4cc; Step 2: 概率計算 &#x1f4cc; Step 3: 決策選擇 &#x1f914; 一個有…

Python netifaces 庫詳解:跨平臺網絡接口與 IP 地址管理

一、前言 在現代網絡編程中&#xff0c;獲取本機的網絡接口信息和 IP 配置是非常常見的需求。 例如&#xff1a; 開發一個需要選擇合適網卡的 網絡服務&#xff1b;在多網卡環境下實現 流量路由與控制&#xff1b;在系統診斷工具中展示 IP/MAC 地址、子網掩碼、默認網關&#x…

HTML應用指南:利用POST請求獲取上海黃金交易所金價數據

上海黃金交易所&#xff08;SGE&#xff09;作為中國唯一經國務院批準、專門從事黃金等貴金屬交易的國家級市場平臺&#xff0c;自成立以來始終秉持“公開、公平、公正”的原則&#xff0c;致力于構建規范、高效、透明的貴金屬交易市場體系。交易所通過完善的交易機制、嚴格的風…

C++常見面試題-1.C++基礎

一、C 基礎 1.1 語言特性與區別C 與 C 的主要區別是什么&#xff1f;C 為何被稱為 “帶類的 C”&#xff1f; 主要區別&#xff1a;C 引入了面向對象編程&#xff08;OOP&#xff09;特性&#xff08;類、繼承、多態等&#xff09;&#xff0c;而 C 是過程式編程語言&#xff1…

Tomcat里catalina.sh詳解

在 Tomcat 中&#xff0c;catalina.sh&#xff08;Linux/macOS&#xff09;或 catalina.bat&#xff08;Windows&#xff09;是 核心的啟動和關閉腳本&#xff0c;用于控制 Tomcat 服務器的運行。它是 Tomcat 的“主控腳本”&#xff0c;負責設置環境變量、啟動/關閉 JVM 進程&…

STM32之MCU和GPIO

一、單片機MCU 1.1 單片機和嵌入式 嵌入式系統 以計算機為核心&#xff0c;tips&#xff1a;計算機【處理單元&#xff0c;內存 硬盤】 可以控制的外部設備&#xff0c;傳感器&#xff0c;電機&#xff0c;繼電器 嵌入式開發 數據源--> 處理器(CPU MCU MPU) --> 執行器 …

22_基于深度學習的桃子成熟度檢測系統(yolo11、yolov8、yolov5+UI界面+Python項目源碼+模型+標注好的數據集)

目錄 項目介紹&#x1f3af; 功能展示&#x1f31f; 一、環境安裝&#x1f386; 環境配置說明&#x1f4d8; 安裝指南說明&#x1f3a5; 環境安裝教學視頻 &#x1f31f; 二、數據集介紹&#x1f31f; 三、系統環境&#xff08;框架/依賴庫&#xff09;說明&#x1f9f1; 系統環…

數據結構:二叉樹oj練習

在講今天的題目之前&#xff0c;我們還需要講一下二叉樹的以下特點&#xff1a; 對任意一顆二叉樹&#xff0c;如果度為0的節點個數是n0&#xff0c;度為2的節點個數是n2&#xff0c;則有n0n21. 證明&#xff1a;二叉樹總的節點個數是n&#xff0c;那么有nn0n1n2 二叉樹的度為…

RabbitMQ高級特性——TTL、死信隊列、延遲隊列、事務、消息分發

目錄 一、TTL 1.1設置消息的TTL 1.2設置隊列的TTL 1.3兩者之間的區別 二、死信隊列 2.1死信的概念 2.2死信產生的條件&#xff1a; 2.3死信隊列的實現 死信隊列的工作原理 2.4常??試題 三、延遲隊列 3.1概念 3.2應用場景 3.3RabbitMQ 實現延遲隊列的核心原理 1…

神經網絡設計中關于BN歸一化(Normalization)的討論

在神經網絡的結構中&#xff0c;我們常常可以看見歸一化&#xff08;Normalization&#xff09;如BN的出現&#xff0c;無論是模型的backbone或者是neck的設計都與它有著重大的關系。 因此引發了我對它的思考&#xff0c;接下來我將從 是什么&#xff08;知識領域&#xff0c;誕…

MacOS 安全機制與“文件已損壞”排查完整指南

1. 背景說明macOS 為了保護系統安全&#xff0c;內置了多個安全機制&#xff1a;機制作用是否影響第三方 AppSIP (System Integrity Protection)保護系統關鍵文件/目錄不被篡改高風險 App/驅動可能受限Gatekeeper限制未簽名/未認證 App 運行阻止“未知開發者” App文件隔離屬性…