Oracle常用函數

来源:https://www.cnblogs.com/hellohowlow/archive/2018/01/14/8283631.html
-Advertisement-
Play Games

select * from scott.dept;select * from scott.emp; --dual 是 Oracle提供的一個虛表select length('hello') from dual; --常用函數--lower把大寫轉小寫 upper把小寫轉大寫select * from ...


select * from scott.dept;
select * from scott.emp;

--dual 是 Oracle提供的一個虛表
select length('hello') from dual;

--常用函數
--lower把大寫轉小寫 upper把小寫轉大寫
select * from scott.emp where ename='smith';
--搜索字母轉為小寫後的結果
select * from scott.emp where lower(ename)='smith';

select upper('helloworld') from dual;
select lower('HELLOWORLD') from dual;

--INITCAP使串中的所有單詞的首字母變為大寫
select initcap('sql course') from dual;

--CONCAT 連接兩個字元串
select concat('Hello','World') from dual;

--substr 取子字元串,從start開始,取count個
select substr('HelloWorld',1,5) from dual;

--substr 取子字元串,從4開始取到末尾
select substr('HelloWorld',-4) from dual;

--LENGTH 返回字元串的長度
select length('HelloWorld') from dual;


--INSTR(string,char) 在一個字元串中搜索指定的字元,返回發現指定的字元的位置,從1開始
select instr('HelloWorld','o') from dual;

--RPAD在列的右邊粘貼字元,LPAD在列的左邊粘貼字元
select rpad(sal,8,'*') from scott.emp;

select lpad(sal,8,'*') from scott.emp;

--TRIM刪除首尾的空字元串
select trim(' HelloWorld ') from dual;
select length(' HelloWorld ') from dual;
select length(trim(' HelloWorld ')) from dual;

--TRIM刪除首尾的H(對大小寫敏感)
select trim('H' from 'HelloWorldH') from dual;

--TRIM刪除首的H
select trim(leading 'H' from 'HelloWorldH') from dual;

--TRIM刪除尾的H
select trim(trailing 'H' from 'HelloWorldH') from dual;

--TRIM刪除首尾的H
select trim(both 'H' from 'HelloWorldH') from dual;

--REPLACE('string','s1','s2')
--string 希望被替換的字元或變數
--s1 需要被替換的字元串 s2 替換的字元串
select replace('HelloWorldH','ll','FF') from dual;

--數值函數 Round四捨五入
select Round(3.14159,3) from dual;

--TRUNC截斷
select TRUNC(3.14159,3) from dual;

--取模
select MOD(1600,300) from dual;

--日期函數

create table tb_test(
currdate date
);

select * from tb_test;

--查詢系統時間
select sysdate from dual;

--插入sysdate
insert into tb_test(currdate)values(sysdate);
--to_date將自定義日期格式字元串插入date類型的數據
insert into tb_test(currdate)values(to_date('2018/1/14 02:03:42','yyyy/mm/dd hh:mi:ss'));
insert into tb_test(currdate)values(to_date('2018/1/14','yyyy/mm/dd'));
--日期函數
--oracle的日期類型時date 預設是yyyy/mm/dd hh:mi:ss
select sysdate from dual;

--在日期上加上或減去一個數字結果仍為日期
select sysdate+84 from dual;

--三個轉換函數 to_date to_char to_number
--to_date(日期字元串,格式)
select to_date('2018/1/14 02:03:42','yyyy/mm/dd hh:mi:ss') from dual;
select to_date('2018/1/14','yyyy/mm/dd') from dual;

--to_char(日期,格式) 將日期轉成字元
select to_char(sysdate,'yyyy/mm/dd') from dual;
select to_char(sysdate,'yyyy/mm/dd hh:mi:ss') from dual;
select to_char(sysdate,'mm') from dual;
--將數字轉成字元
select to_char(3.14159) from dual;

--to_number(字元串) 將一個字元串的數字轉成number類型
select to_number('123.123') from dual;
--不能將非數字的字元串轉成number類型
select tb_number('abc') from dual;

--兩個日期相減返回日期之間相差的天數
select to_date('2018/04/08','yyyy/mm/dd')-sysdate from dual;
select TRUNC(to_date('2018/04/08','yyyy/mm/dd')-sysdate,0) from dual;
select sysdate-to_date('2018/04/08','yyyy/mm/dd') from dual;

--可以用數字除24來嚮日期中加上或減去小時
select sysdate+2/24 from dual;
--可以用數字除24再除60嚮日期中加上分鐘
select sysdate+2/24/60 from dual;

--返回d1,d2之間月的數量,d1,d2可為字元串
select months_between(
to_date('2018-04-08','yyyy-mm-dd'),
to_date('2017-11-20','yyyy-mm-dd')
)as months from dual;

--返回日期d加上3個月後的日期,3是整數
select add_months(sysdate,3) from dual;

--返回日期d後第一個星期幾的日期
select next_day(sysdate,'星期二') from dual;
--國外周日是1 , 所以3指周二
select next_day(sysdate,3) from dual;

--返回d所在月最後一天的日期
select last_day(sysdate) from dual;

--得到下一小時 0分0秒
select trunc(sysdate+1/24,'hh') from dual;

--得到下一天 0分0秒
select trunc(sysdate+1,'dd') from dual;

--得到下一月 1號0分0秒
select last_day(sysdate) from dual;
select trunc(last_day(sysdate)+1) from dual;

--得到下一年 1月1號0分0秒
select trunc(sysdate,'yyyy') from dual;
select add_months(trunc(sysdate,'yyyy'),12) from dual;

--Round四捨五入函數 預設按照 dd進行 4舍5入 超過中午 12點就進入下一天
select Round(sysdate) from dual;

--超過15號返回下一個月
select Round(sysdate,'mm') from dual;
--超過6月就返回下一年1月1號
select Round(sysdate,'yyyy') from dual;

--截斷日期
select trunc(sysdate,'mm') from dual;
select trunc(sysdate,'dd') from dual;
select trunc(sysdate,'hh') from dual;

--定時器
--每分鐘執行
select trunc(sysdate,'mi')+1/24/60 from dual;

--每天定時執行3
--例如:每天的凌晨2點執行
select trunc(sysdate)+1+2/24 from dual;

--每周定時執行
--例如:每周一凌晨2點執行
select trunc(next_day(sysdate,2))+2/24 from dual;

--每月定時執行
--例如:每月1日凌晨2點執行
select trunc(last_day(sysdate))+1+2/24 from dual;

--每季度定時執行
--例如每季度的第一天凌晨2點執行
select trunc(add_months(sysdate,3),'Q')+2/24 from dual;

--每半年定時執行
--例如:每年7月1日和1月1日凌晨2點
select add_months(trunc(sysdate,'yyyy'),6)+2/24 from dual;

--每年定時執行
--例如:每年1月1日和凌晨2點執行
select add_months(trunc(sysdate,'yyyy'),12)+2/24 from dual;

--通用函數完成一些功能
--nvl函數 如果第一個參數為null,則取第二個參數
select comm from scott.emp;
select nvl(comm,0) from scott.emp;

--使用0替換null的comm,計算年收入
select ename,sal,comm,(sal+comm)*12 年收入 from scott.emp;
select ename,sal,nvl(comm,0),(sal+nvl(comm,0))*12 from scott.emp;

--nvl2函數 如果第一個參數為null,則取第三個參數,否則取第二個參數
select nvl2(comm,comm,0) from scott.emp;

--nullif 相等返回null,不等返回expr1
select nullif(1,3) from dual;

--多行函數
--case
select * from scott.emp;

select ename,job,sal 基本工資,
case job
when 'SALESMAN' THEN sal+sal*0.9
when 'MANAGER' THEN sal+sal*0.85
when 'ANALYST' THEN sal+100
when 'CLERK' THEN sal+200
else sal
end
as 實發工資 --作為別名
from scott.emp;

--decode函數
select ename,job,sal 基本工資,
decode(job,
'SALESMAN', sal+sal*0.39,
'MANAGER' , sal+sal*0.85,
'ANALYST' , sal+100,
'CLERK' , sal+200,
'PRESIDENT',sal
)as 實發工資 --別名
from scott.emp;

--多表連接
create table tb_course(
name varchar2(18),
course varchar2(18),
grade number
);

INSERT INTO tb_course(NAME,course,grade) VALUES('tom','JDBC',20);
INSERT INTO tb_course(NAME,course,grade) VALUES('tom','Hibernate',50);
INSERT INTO tb_course(NAME,course,grade) VALUES('tom','Spring',80);
INSERT INTO tb_course(NAME,course,grade) VALUES('mary','JDBC',30);
INSERT INTO tb_course(NAME,course,grade) VALUES('mary','Hibernate',60);
INSERT INTO tb_course(NAME,course,grade) VALUES('mary','Spring',70);

--多表連接1.
select * from tb_course;
select name,grade as JDBC from tb_course where course='JDBC';
select name,grade as Hibernate from tb_course where course='Hibernate';
select name,grade as Spring from tb_course where course='Spring';

select T4.name,T1.JDBC,T2.Hibernate,T3.Spring
from
(select name,grade as JDBC from tb_course where course='JDBC') T1,
(select name,grade as Hibernate from tb_course where course='Hibernate') T2,
(select name,grade as Spring from tb_course where course='Spring') T3,
(select distinct name from tb_course) T4
where T4.name = T1.name and T4.name = T2.name and T4.name = T3.name;

--多表連接2.
select
name,
decode(course,'JDBC',grade,0) AS JDBC,--如果'course'列的值是'jdbc',則顯示'grade'的值,否則顯示0
decode(course,'Hibernate',grade,0) AS Hibernate,
decode(course,'Spring',grade,0) AS Spring
from
tb_course;

--decode(column,value,cloumnvalue,default)
--分組,組函數,decode
select
name,
sum(decode(course,'JDBC',grade,0)) JDBC,
sum(decode(course,'Hibernate',grade,0)) Hibernate,
sum(decode(course,'Spring',grade,0)) Spring
from
tb_course t
GROUP BY t.name;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在.NET中有兩個AuthorizeAttribute類, 一個定義在System.Web.Http命名空間下 #region 程式集 System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35... ...
  • 查看mysql資料庫federated引擎是否開啟。 show engines; 若沒有開啟federated則在mysql配置文件my.cnf中mysqld中添加federated。 在遠程資料庫中添加遠程訪問資料庫的用戶 創建表 CREATE TABLE `work_step_apply_che ...
  • 前段時間,換了個27寸的4k顯示器。原始解析度下文字太小,眼睛估計得看瞎 放大dpi後,這問題,那問題,好多 百度知道,淘寶,這網頁文字顏色也非常的淺,看著眼睛很累人 看了半天是字體若的禍 暫時發現Arial與Tahoma字體,在dpi放大後,會出現這個問題 折騰了半天,我把微軟雅黑UI的字體改名, ...
  • 系統信息 arch 顯示機器的處理器架構(1) uname -m 顯示機器的處理器架構(2) uname -r 顯示正在使用的內核版本 dmidecode -q 顯示硬體系統部件 - (SMBIOS / DMI) hdparm -i /dev/hda 羅列一個磁碟的架構特性 hdparm -tT / ...
  • zabbix工具監控伺服器是以組的形式來管理,創建單個被監控伺服器之前需要先創建一個主機組,然後將被監控機添加到這個組中即可 1 創建主機群組: 2 向主機群組中添加主機 3 向主機中添加模板,選擇要監控哪些服務等 4 查看監控的內容以及數據成圖 ...
  • 本章目錄 1.1 Shell,Bash介紹 1.2 內部命令與外部命令 1.3 命令別名 1.4 命令歷史 1.5 Bash快捷鍵 1.1 Shell,Bash介紹 ◆Shell:Linux系統的用戶界面,提供了用戶與內核進行交互操作的一種介面。它接收用戶輸入的命令並把它送入內核去執行。 ◆Bash ...
  • 前言: Linux一般將文件可存取的身份分為三個類別,分別是 owner/group/others,根據許可權劃分,每個目錄都可以擁有相對身份的-rwx[可讀可寫可執行] 使用者與群組: Owner :文件擁有者,如jane擁有此文件所屬權,可對該文件進行相應許可權操作。 Group :文件擁有組,如一 ...
  • 概述 由於目前生產環境的mysql資料庫分佈在兩台伺服器,若從單一主從來看,配置很簡單,但是需要將兩台伺服器的資料庫同步到一臺從庫上面,需要進行更多配置和註意事項。多源複製有兩種方案,Binlog+Position和GTID,我們採用的是第一種方案Binlog+Position進行的多源複製。 安裝 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...