最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Oracle數(shù)據(jù)庫常用函數(shù)總結(jié)大全

 更新時(shí)間:2025年12月08日 09:42:11   作者:IvanCodes  
這篇文章主要介紹了Oracle數(shù)據(jù)庫常用函數(shù)總結(jié)的相關(guān)資料,包括數(shù)值、字符、日期、轉(zhuǎn)換等類型,以及如何使用注釋、運(yùn)算符和處理空值等內(nèi)容,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下

前言

Oracle SQL 提供了極其豐富的內(nèi)置函數(shù)庫,這些函數(shù)是數(shù)據(jù)處理、查詢和分析的強(qiáng)大武器。本教程將系統(tǒng)地介紹各類常用函數(shù),并為每個(gè)函數(shù)提供獨(dú)立的示例和注釋結(jié)果。

思維導(dǎo)圖

一、字符函數(shù)

1.1 UPPER(string)

  • 功能:將字符串轉(zhuǎn)換為大寫。
SELECT UPPER('Hello Oracle') FROM dual;
-- 返回: 'HELLO ORACLE'

1.2 LOWER(string)

  • 功能:將字符串轉(zhuǎn)換為小寫。
SELECT LOWER('Hello Oracle') FROM dual;
-- 返回: 'hello oracle'

1.3 INITCAP(string)

  • 功能:將字符串中每個(gè)單詞的首字母大寫。
SELECT INITCAP('hello oracle world') FROM dual;
-- 返回: 'Hello Oracle World'

1.4 LENGTH(string)

  • 功能:返回字符串的字符長度。
SELECT LENGTH('Oracle SQL') FROM dual;
-- 返回: 10

1.5 INSTR(string, substring, [start_position], [nth_appearance])

  • 功能:返回子字符串在字符串中的位置。
SELECT INSTR('oracle sql is cool sql', 'sql', 1, 2) FROM dual;
-- 返回: 21 (從第1個(gè)字符開始查找,第2次出現(xiàn)的'sql'的位置)

1.6 SUBSTR(string, start_position, [length])

  • 功能:從指定位置開始截取子字符串。
SELECT SUBSTR('Oracle Database', 8, 8) FROM dual;
-- 返回: 'Database' (從第8個(gè)字符開始,截取8個(gè)字符)

1.7 REPLACE(string, search_string, [replacement_string])

  • 功能:替換字符串中所有出現(xiàn)的子字符串。
SELECT REPLACE('black cat and blue cat', 'cat', 'dog') FROM dual;
-- 返回: 'black dog and blue dog'

1.8 CONCAT(string1, string2)

  • 功能:連接兩個(gè)字符串。更常用的是 || 操作符。
SELECT CONCAT('Hello', ' World') FROM dual;
-- 返回: 'Hello World'
SELECT 'Oracle' || ' ' || 'SQL' FROM dual;
-- 返回: 'Oracle SQL'

1.9 LPAD(string, length, [pad_string])

  • 功能:左側(cè)填充字符到指定長度。
SELECT LPAD('123', 5, '0') FROM dual;
-- 返回: '00123'

1.10 RPAD(string, length, [pad_string])

  • 功能:右側(cè)填充字符到指定長度。
SELECT RPAD('abc', 5, '*') FROM dual;
-- 返回: 'abc**'

1.11 TRIM(string)

  • 功能:去除字符串兩邊的空格。
SELECT TRIM('  Oracle  ') FROM dual;
-- 返回: 'Oracle'

1.12 LTRIM(string, [set])

  • 功能:去除字符串左側(cè)的指定字符集。
SELECT LTRIM('$$$100', '$') FROM dual;
-- 返回: '100'

1.13 RTRIM(string, [set])

  • 功能:去除字符串右側(cè)的指定字符集。
SELECT RTRIM('abc##', '#') FROM dual;
-- 返回: 'abc'

二、數(shù)值函數(shù)

2.1 ROUND(number, [decimal_places])

  • 功能:對(duì)數(shù)字進(jìn)行四舍五入。
SELECT ROUND(123.456, 2) FROM dual;
-- 返回: 123.46

2.2 TRUNC(number, [decimal_places])

  • 功能:對(duì)數(shù)字進(jìn)行截?cái)唷?/li>
SELECT TRUNC(123.456, 2) FROM dual;
-- 返回: 123.45

2.3 CEIL(number)

  • 功能:返回大于或等于該數(shù)字的最小整數(shù) (向上取整)。
SELECT CEIL(99.1) FROM dual;
-- 返回: 100

2.4 FLOOR(number)

  • 功能:返回小于或等于該數(shù)字的最大整數(shù) (向下取整)。
SELECT FLOOR(99.9) FROM dual;
-- 返回: 99

2.5 MOD(m, n)

  • 功能:返回 m 除以 n 的余數(shù)。
SELECT MOD(10, 3) FROM dual;
-- 返回: 1

2.6 ABS(number)

  • 功能:返回?cái)?shù)字的絕對(duì)值。
SELECT ABS(-123) FROM dual;
-- 返回: 123

三、日期函數(shù)

3.1 SYSDATE

  • 功能:返回當(dāng)前數(shù)據(jù)庫服務(wù)器的日期和時(shí)間。
SELECT SYSDATE FROM dual;
-- 返回: (當(dāng)前日期和時(shí)間,例如 2024-03-22 10:30:00)

3.2 SYSTIMESTAMP

  • 功能:返回當(dāng)前數(shù)據(jù)庫服務(wù)器的日期、時(shí)間,并包含小數(shù)秒和時(shí)區(qū)。
SELECT SYSTIMESTAMP FROM dual;
-- 返回: (當(dāng)前日期時(shí)間+小數(shù)秒+時(shí)區(qū),例如 22-MAR-24 10.30.00.123456 AM +08:00)

3.3 ADD_MONTHS(date, integer)

  • 功能:增加或減少指定的月份數(shù)。
SELECT ADD_MONTHS(TO_DATE('2024-01-31', 'YYYY-MM-DD'), 1) FROM dual;
-- 返回: 29-FEB-24 (會(huì)自動(dòng)處理月末日期)

3.4 MONTHS_BETWEEN(date1, date2)

  • 功能:返回兩個(gè)日期之間的月份數(shù)。
SELECT MONTHS_BETWEEN(TO_DATE('2024-07-15', 'YYYY-MM-DD'), TO_DATE('2024-01-15', 'YYYY-MM-DD')) FROM dual;
-- 返回: 6

3.5 LAST_DAY(date)

  • 功能:返回指定日期所在月份的最后一天。
SELECT LAST_DAY(TO_DATE('2024-02-10', 'YYYY-MM-DD')) FROM dual;
-- 返回: 29-FEB-24 (2024是閏年)

3.6 NEXT_DAY(date, ‘day_of_week’)

  • 功能:返回指定日期之后第一個(gè)指定星期幾的日期。
SELECT NEXT_DAY(TO_DATE('2024-03-22', 'YYYY-MM-DD'), '星期一') FROM dual; -- 假設(shè)NLS_DATE_LANGUAGE是中文
-- 返回: 25-MAR-24

3.7 TRUNC(date, [format_model])

  • 功能:按指定格式截?cái)嗳掌凇?/li>
SELECT TRUNC(SYSDATE, 'MM') FROM dual;
-- 返回: (當(dāng)月的第一天,例如 01-MAR-24)

3.8 EXTRACT(unit FROM date)

  • 功能:從日期中提取特定部分。
SELECT EXTRACT(YEAR FROM SYSDATE) FROM dual;
-- 返回: (當(dāng)前年份,例如 2024)

四、轉(zhuǎn)換函數(shù)

4.1 TO_CHAR(date/number, [format_model])

  • 功能:將日期或數(shù)字轉(zhuǎn)換為指定格式的字符串。
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM dual;
-- 返回: '2024-03-22 10:30:00' (示例)
SELECT TO_CHAR(12345.67, 'FM99G999D00') FROM dual;
-- 返回: '12,345.67'

4.2 TO_DATE(string, [format_model])

  • 功能:將符合特定格式的字符串轉(zhuǎn)換為日期類型。
SELECT TO_DATE('2024/01/15', 'YYYY/MM/DD') FROM dual;
-- 返回: 15-JAN-24 (日期類型)

4.3 TO_NUMBER(string, [format_model])

  • 功能:將字符串轉(zhuǎn)換為數(shù)字類型。
SELECT TO_NUMBER('1,234.56', '9,999.99') FROM dual;
-- 返回: 1234.56 (數(shù)字類型)

五、聚合函數(shù)

(通常與 GROUP BY 配合使用,此處為簡化,對(duì)全表操作)

5.1 COUNT(*) / COUNT(column) / COUNT(DISTINCT column)

  • 功能:計(jì)算行數(shù)。
-- 假設(shè) employees 表有10條記錄, 其中 commission_pct 有3個(gè)非空值,2種不同的非空值
SELECT COUNT(*), COUNT(commission_pct), COUNT(DISTINCT commission_pct) FROM employees;
-- 返回: 10, 3, 2

5.2 SUM(expression)

  • 功能:計(jì)算總和。
SELECT SUM(salary) FROM employees;
-- 返回: (所有員工薪水總和)

5.3 AVG(expression)

  • 功能:計(jì)算平均值。
SELECT AVG(salary) FROM employees;
-- 返回: (所有員工薪水平均值)

5.4 MAX(expression)

  • 功能:找出最大值。
SELECT MAX(salary) FROM employees;
-- 返回: (最高薪水)

5.5 MIN(expression)

  • 功能:找出最小值。
SELECT MIN(salary) FROM employees;
-- 返回: (最低薪水)

六、通用/其他函數(shù)

6.1 NVL(expr1, expr2)

  • 功能:如果 expr1 不為NULL,返回 expr1;否則返回 expr2。
SELECT NVL(commission_pct, 0) FROM employees;
-- 返回: (如果commission_pct是NULL,則顯示0,否則顯示其本身的值)

6.2 NVL2(expr1, expr2, expr3)

  • 功能:如果 expr1 不為NULL,返回 expr2;否則返回 expr3。
SELECT NVL2(commission_pct, 'Has Commission', 'No Commission') FROM employees;
-- 返回: (根據(jù)commission_pct是否為NULL,顯示不同的字符串)

6.3 DECODE(expr, search1, result1, … [default])

  • 功能:Oracle特有的 IF-THEN-ELSE IF 邏輯。
SELECT department, DECODE(department, 'Sales', 'S', 'HR', 'H', 'Other') AS dept_code FROM employees;
-- 返回: (將部門名轉(zhuǎn)換為代碼)

6.4 CASE WHEN … END

  • 功能:ANSI標(biāo)準(zhǔn)的條件表達(dá)式,更靈活。
SELECT salary, CASE WHEN salary > 10000 THEN 'High' ELSE 'Normal' END AS salary_level FROM employees;
-- 返回: (根據(jù)薪水是否大于10000,顯示不同的等級(jí))

練習(xí)題

背景表:employees

CREATE TABLE employees (
    employee_id     NUMBER(10) NOT NULL,
    full_name       VARCHAR2(100 CHAR) NOT NULL,
    job_title       VARCHAR2(100 CHAR) NOT NULL,
    department      VARCHAR2(50 CHAR) NOT NULL,
    salary          NUMBER(10, 2) NOT NULL,
    commission_pct  NUMBER(4, 2),
    hire_date       DATE NOT NULL,
    CONSTRAINT employees_pk PRIMARY KEY (employee_id)
);

題目:

  1. 查詢所有員工的全名,格式為 “名 姓” (例如, ‘John Doe’),并且所有字母都為大寫。
  2. 查詢所有員工入職至今的完整月數(shù),結(jié)果四舍五入到整數(shù)。
  3. 查詢所有員工的姓氏 (即 full_name 中逗號(hào)前的部分)。
  4. 查詢所有員工的薪資等級(jí)。如果薪水大于10000,等級(jí)為’A’;如果在5000到10000之間 (含),等級(jí)為’B’;否則為’C’。
  5. 計(jì)算每個(gè)部門的員工總數(shù)和平均薪資。
  6. 查詢所有員工的總收入。總收入 = salary + (salary * commission_pct)。注意 commission_pct 可能為NULL,如果為NULL,則提成視為0。
  7. 查詢所有員工的入職日期,格式為 “YYYY年MM月DD日”。
  8. 查詢每個(gè)員工以及其所在部門中薪水次高的員工的薪水。如果該員工已經(jīng)是薪水最高的,則顯示NULL。
  9. 查詢所有員工的姓氏,并確保首字母大寫,其余小寫,同時(shí)去除可能存在的前后空格。
  10. 查詢每個(gè)員工入職當(dāng)月的最后一天是星期幾 (英文全稱)。

答案與解析:

  1. 查詢并格式化全名:
SELECT UPPER(SUBSTR(full_name, INSTR(full_name, ',') + 2) || ' ' || SUBSTR(full_name, 1, INSTR(full_name, ',') - 1)) AS formatted_name
FROM employees;
  • 解析: INSTR 找到逗號(hào)位置,SUBSTR 分別截取姓和名。|| 用于拼接字符串,UPPER 將結(jié)果轉(zhuǎn)為大寫。
  1. 計(jì)算入職月數(shù):
SELECT full_name, ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) AS months_worked
FROM employees;
  • 解析: MONTHS_BETWEEN 計(jì)算兩個(gè)日期之間的月數(shù) (返回小數(shù)),ROUND 對(duì)結(jié)果進(jìn)行四舍五入取整。
  1. 提取姓氏:
SELECT SUBSTR(full_name, 1, INSTR(full_name, ',') - 1) AS last_name
FROM employees;
  • 解析: INSTR 找到逗號(hào)的位置,SUBSTR 從第一個(gè)字符開始截取到逗號(hào)前一個(gè)位置。
  1. 劃分薪資等級(jí):
SELECT full_name, salary,
       CASE
         WHEN salary > 10000 THEN 'A'
         WHEN salary BETWEEN 5000 AND 10000 THEN 'B'
         ELSE 'C'
       END AS salary_grade
FROM employees;
  • 解析: 使用 CASE 語句進(jìn)行多條件判斷。BETWEEN ... AND ... 包含邊界值。
  1. 按部門聚合計(jì)算:
SELECT department, COUNT(*) AS number_of_employees, ROUND(AVG(salary), 2) AS average_salary
FROM employees
GROUP BY department;
  • 解析: 使用 GROUP BY 按部門分組,COUNT(*) 計(jì)算每組的行數(shù),AVG(salary) 計(jì)算每組的平均薪資。
  1. 計(jì)算總收入 (處理NULL):
SELECT full_name, salary + (salary * NVL(commission_pct, 0)) AS total_income
FROM employees;
  • 解析: NVL(commission_pct, 0) 是關(guān)鍵。如果 commission_pct 為NULL,它會(huì)返回0,從而避免了整個(gè)計(jì)算表達(dá)式因NULL而變成NULL。
  1. 格式化入職日期:
SELECT full_name, TO_CHAR(hire_date, 'YYYY"年"MM"月"DD"日"') AS formatted_hire_date
FROM employees;
  • 解析: TO_CHAR 函數(shù)使用指定的格式模型將日期轉(zhuǎn)換為字符串。雙引號(hào)用于包含非格式化模型的文字。
  1. 查詢部門次高薪水 (LAG):
SELECT full_name, department, salary,
       LAG(salary, 1, NULL) OVER (PARTITION BY department ORDER BY salary DESC) AS next_highest_salary
FROM employees;
  • 解析: LAG(salary, 1, NULL) 訪問按薪水降序排列后,每個(gè)部門窗口內(nèi)的上一行 (即薪水次高) 的 salary 值。對(duì)于薪水最高的人,沒有上一行,所以返回默認(rèn)值 NULL。
  1. 格式化姓氏:
SELECT INITCAP(TRIM(SUBSTR(full_name, 1, INSTR(full_name, ',') - 1))) AS cleaned_last_name
FROM employees;
  • 解析: 組合使用函數(shù)。SUBSTR 和 INSTR 提取姓氏,TRIM 去除可能存在的空格,INITCAP 將其格式化為首字母大寫。
  1. 入職月最后一天是星期幾:
SELECT full_name, hire_date, TO_CHAR(LAST_DAY(hire_date), 'Day') AS last_day_of_hire_month
FROM employees;
  • 解析: LAST_DAY 找到入職月份的最后一天,然后 TO_CHAR 使用 ‘Day’ 格式模型將其轉(zhuǎn)換為完整的星期幾名稱。

總結(jié)

到此這篇關(guān)于Oracle數(shù)據(jù)庫常用函數(shù)的文章就介紹到這了,更多相關(guān)Oracle常用函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Oracle別名使用要點(diǎn)小結(jié)

    Oracle別名使用要點(diǎn)小結(jié)

    在Oracle中別名也可以在列名和表名中進(jìn)行,進(jìn)行別名處理是為了給列或表一個(gè)臨時(shí)項(xiàng),下面這篇文章主要給大家介紹了關(guān)于Oracle別名使用的一些要點(diǎn)小結(jié),需要的朋友可以參考下
    2022-04-04
  • Oracle表字段有Oracle關(guān)鍵字出現(xiàn)異常解決方案

    Oracle表字段有Oracle關(guān)鍵字出現(xiàn)異常解決方案

    這篇文章主要介紹了Oracle表字段有Oracle關(guān)鍵字出現(xiàn)異常解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • oracle表的簡單操作步驟

    oracle表的簡單操作步驟

    這篇文章主要介紹了oracle表的簡單操作步驟,需要的朋友可以參考下
    2017-06-06
  • Oralce中VARCHAR2()與NVARCHAR2()的區(qū)別介紹

    Oralce中VARCHAR2()與NVARCHAR2()的區(qū)別介紹

    這篇文章主要給大家詳細(xì)介紹了關(guān)于Oralce中VARCHAR2()與NVARCHAR2()的區(qū)別,文中先通過翻譯官方的介紹進(jìn)行區(qū)別總結(jié),然后由一個(gè)實(shí)戰(zhàn)示例代碼進(jìn)行演示,相信對(duì)大家的理解會(huì)很有幫助,有需要的朋友們下面來跟著小編一起看看吧。
    2016-12-12
  • oracle AWR性能監(jiān)控報(bào)告生成方法

    oracle AWR性能監(jiān)控報(bào)告生成方法

    這篇文章主要為大家詳細(xì)介紹了oracle AWR性能監(jiān)控報(bào)告的生成方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 實(shí)例分析ORACLE數(shù)據(jù)庫性能優(yōu)化

    實(shí)例分析ORACLE數(shù)據(jù)庫性能優(yōu)化

    這篇文章主要介紹了從實(shí)例著手分析ORACLE數(shù)據(jù)庫性能優(yōu)化問題以及解決辦法,需要的朋友參考下吧。
    2017-12-12
  • oracle數(shù)據(jù)庫的基本使用教程(建表,操作表等)

    oracle數(shù)據(jù)庫的基本使用教程(建表,操作表等)

    這篇文章主要給大家介紹了關(guān)于oracle數(shù)據(jù)庫的基本使用(建表,操作表等)的相關(guān)資料,包含了Oracle創(chuàng)建表(create table as)使用方法、操作技巧、實(shí)例演示和注意事項(xiàng),需要的朋友可以參考下
    2024-01-01
  • Oracle使用SQL PIUS格式化輸出查詢結(jié)果的多種方法

    Oracle使用SQL PIUS格式化輸出查詢結(jié)果的多種方法

    本文介紹了在SQL*Plus中設(shè)置查詢結(jié)果顯示的方法,使用COLUMN命令可以設(shè)置顯示列的別名、長度限制和格式化顯示;使用SET命令可以設(shè)置每頁顯示行數(shù)、每行顯示的字符數(shù)、顯示查詢數(shù)據(jù)所用的時(shí)間、顯示列標(biāo)題等,通過這些設(shè)置,可以更好地查看查詢結(jié)果
    2026-04-04
  • Oracle minus用法詳解及應(yīng)用實(shí)例

    Oracle minus用法詳解及應(yīng)用實(shí)例

    這篇文章主要介紹了Oracle minus用法詳解及應(yīng)用實(shí)例的相關(guān)資料,這里對(duì)oracle minus的用法進(jìn)行了具體實(shí)例詳解,需要的朋友可以參考下
    2017-01-01
  • ORACLE應(yīng)用經(jīng)驗(yàn)(1)

    ORACLE應(yīng)用經(jīng)驗(yàn)(1)

    ORACLE應(yīng)用經(jīng)驗(yàn)(1)...
    2007-03-03

最新評(píng)論

阿合奇县| 石屏县| 百色市| 石阡县| 铜川市| 如东县| 徐水县| 银川市| 阳朔县| 上高县| 邵东县| 青浦区| 黎平县| 竹溪县| 外汇| 陆丰市| 宜都市| 会理县| 成武县| 抚松县| 龙南县| 娱乐| 大冶市| 库车县| 敖汉旗| 慈利县| 富民县| 新疆| 鹰潭市| 洛川县| 大关县| 竹山县| 丰原市| 台南县| 普宁市| 兴仁县| 八宿县| 德昌县| 海盐县| 米泉市| 西峡县|