Oracle筆記之單行函數(一)
字符函數
--首字母大寫,小寫,大寫
select initcap(rowid)from otest
select lower(rowid)from otest
select upper(rowid)from otest
--合併列 concat(a,b)
select orderno || job || tid from otest
select concat(orderno,job)from otest
select concat('hello ','world')合併from dual
--字符串截取
--從第2位開始取,到結尾
select substr(orderno,2)from otestwhere orderno =888
--從第3位開始取,取5位
select substr('hello world',3,5)from dual
--instr(a,b),返回字符所在位置,不存在返回0
select instr(orderno,2)位置from otest
--字符長度,字節長度
select length(orderno)字符長度from otest--3
select length(job)字符長度from otest --2
select lengthb(orderno)字節長度from otest--3
select lengthb(job)字節長度from otest--6
select length('北京'),lengthb('北京')from dual--2 6
--lpad左填充rpad右填充(字符,位數,不足位補齊字符)
select lpad('abc',5,'*')left,rpad('abc',5,'+')right from dual
--trim去掉前後指定字符--注意trim關鍵詞from
select trim('h' from 'hello olleh')from dual
--replace(操作物,替換誰,替換爲) --替換字符函數
select replace('hello olleh','l','x')from dual
數字函數
--四捨五入 round(小數,保留位數)
select round(45.625,2)one,round(45.625,1)two,
round(45.625,0) three,round(45.625,-1),round(45.625,-2)from dual
--截斷trunc(小數,保留截斷位數)
select trunc(45.625,2)one,trunc(45.625,1)two,
trunc(45.625,0) three,trunc(45.625,-1),trunc(45.625,-2)from dual
--求餘mod(除數,被除數)
select mod(1600,300)餘數from dual
日期格式和函數
--當前日期sysdate
select sysdate from dual
--利用to_char的日期轉換
/*日期格式:
格式 表示 例如
YYYY 數字年 2017
YEAR 英文年 twenty seventeen
MM 二位月 05
MONTH 全稱月 4月
DD 二位日 02
DY/DAY 星期 星期一
HH12/24 小時制 12/24
MI 分鐘 0-59
SS 秒 0-59
*/
select to_char(sysdate,'yyyy-mm-dd dy hh24:mi:ss')時間日期from dual
--日期不能加日期沒有意義,但可以減日期。日期可以加減數字表示前後天數
select (sysdate+sysdate)time from dual--報錯:Date cannot be dated
select (sysdate-sysdate)time from dual
select (sysdate-1)昨天,(sysdate+1)明天from dual
--日期差months_between(a,b)
select months_between(sysdate,(sysdate-31))相差from dual
--指定日期加月數add_months(a,b)
select add_months(sysdate,5)from dual
--指定日期的下個日期next_day
/*next_day可應用於自動備份數據;異地容災
1.分佈式數據庫 同步、更新、備份
2.快照 觸發器的運用*/
select next_day(sysdate,'星期一')from dual
--本月最後一天last_day
select last_day(sysdate)from dual
--日期的四捨五入round(a,b)
--日期的截斷trunc(a,b)和數字的用法相同,以日期一半劃分
轉換函數
--日期格式中有字符串要用雙引號括起來
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss "今天是"day')from dual
--貨幣的表示,數字格式轉換
/*數字格式
表示 含義
9 數字
0 零
$ 美元
L 本地貨幣
. 小數點
, 千位符
*/
--查詢薪水 要求保留兩位,千位符,貨幣代碼表示
select to_char(orderno,'L9,999.99')from otest
--字符轉數字to_number(字符,數字格式)
select to_number('123','999')from dual
--字符轉日期to_date(字符,日期格式)
select to_date('2017-05-21','yyyy-mm-dd')from dual
--查看默認格式語句
select *from V$nls_Parameters
--默認日期格式爲:DD-MON-RR
--修改默認日期格式
alter session set NLS_DATE_FORMAT = 'yyyy-mm-dd'
通用函數
--nvl(a,b)當a爲null返回b
--nvl(a,b,c)當a爲null返回c,否則返回b
--nullif(a,b)當a=b時,返回null,否則返回a
--coalesce(a,b,...,n)從左到右找到第一個不爲null的值
條件表達式函數
--條件表達式
/*在SQL語句中使用IF-THEN-ELSE邏輯
兩種方法:
CASE表達式:SQL99語法,類似於Basic,比較繁瑣
DECODE函數:Oracle自己的語法,類似Java,比較簡潔
*/
--CASE語句
CASE exprWHEN comparison_expr1THEN return_expr1
WHEN comparison_expr2THEN return_expr2
WHEN comparison_exprnTHEN return_exprn
ELSE else_expr
END
--DECODE函數
DECODE(expr,comparison_expr1,return_expr1,
comparison_expr2,return_expr2,
comparison_exprn,return_exprn,
else_expr)
全文根據數據庫實際編寫摘錄,需讀者掌握基本建表。感謝您的支持與收藏,謝謝!