第四章:oracle 單行行數

icekingdom_cool發表於2020-11-18
--------------------------------------------
--單行函式
    特徵:
      單行函式對單行操作
      每行返回一個結果
      有可能返回值與原引數資料型別不一致
      單行函式可以寫在SELECT、WHERE、ORDER BY子句中
      有些函式沒有引數,有些函式包括一個或多個引數
      函式可以巢狀

----------------------------------------------------------------
----------------字元函式--------------------
      對字元進行操作的函式
----大小寫轉換
--LOWER  將字元轉小寫
1、將所有員工的名字轉小寫
select ename,empno,lower(ename) from emp;
-- dual虛表  不真實存在,返回一行記錄
select lower('wu.yueHong@neusof.com') from dual;--wu.yuehong@neusof.com
select 1 from dual;
--UPPER  將字元轉大寫
select UPPER('wu.yueHong@neusof.com') from dual;--WU.YUEHONG@NEUSOF.COM
--INITCAP 將英文單詞首字母轉大寫其他字母轉小寫
select INITCAP('wu.yueHong neusof.com') from dual;--Wu.Yuehong Neusof.Com

--字元處理
--CONCAT(a,b):拼接a和b 字元拼接  類似於 ||    
2、查詢僱員姓名和工資顯示的結果為  ename+sal (SMITH800)
select ename || sal from emp;
select concat(ename,sal) from emp;--SMITH800
3、查詢僱員姓名和工資顯示的結果為 ename+的工資是+sal (SMITH的工資是800)
select ename || '的工資是' || sal from emp;
select concat(concat(ename,'的工資是'),sal) 工資 from  emp;--函式可以巢狀

--SUBSTR(a,b[,c]) 字串擷取
       ①a:目標字串  b:開始索引,索引從1開始  c:擷取的長度,如果沒有引數c 預設從b開始往後擷取全部
       ②包含開始索引
       ③如果b為正數:開始索引為從左往右取b位確定位置,如果為負數,開始索引為從右往左取|b|位確定位置
select substr('wu.yueHong@neusof.com',2) from dual  --u.yueHong@neusof.com
select substr('wu.yueHong@neusof.com',2,5) from dual  --u.yue    
select substr('wu.yueHong@neusof.com',2,1000) from dual  --u.yueHong@neusof.com
select substr('wu.yueHong@neusof.com',-6,3) from dual  --of.

--LENGTH(a):返回字元a長度
select length('wu.yueHong@neusof.com') from dual;--21

--1.寫一個查詢,用首字母大寫,其它字母小寫顯示僱員的 ename,顯示名字的長度,並給每列一個適當的標籤,
    --條件是滿足所有僱員名字的開始字母是J、A  M 的僱員,並對查詢結果按僱員的ename升序排序。(提示:使用initcap、length、substr)
select initcap(ename) 姓名, length(ename) 長度
  from emp
 where ename like 'J%'
    or ename like 'A%'
    or ename like 'M%'
 order by ename;
 
select initcap(ename) 姓名, length(ename) 長度
  from emp
 where substr(ename,1,1) in ('A','J','M')
 order by ename;


--INSTR(a,b[,c][,d]) 查詢字元
        ①a:目標字串  b:查詢的子串  c:開始索引  d:第幾次出現
        ②在a中從c索引位置開始找b第d次出現的位置 
        ③預設情況下 c和d可以省略,預設為 1
        ④包含開始索引
        ⑤找不到返回0
        
select instr('wu.yueHong@neusof.com','u') from dual--2
select instr('wu.yueHong@neusof.com','u',2,1) from dual--2
select instr('wu.yueHong@neusof.com','u',3,1) from dual--5
select instr('wu.yueHong@neusof.com','x',3,1) from dual--0
select instr('wu.yueHong@neusof.com','u',3,2) from dual--14
select instr('wu.yueHong@neusof.com','u',-9,2) from dual--2 如果c為負數 開始索引為從右往左第|c|,往左找b第d次出現的位置


--LPAD(a,b,c) 左填充   返回a被c從左面填充到b長度後的字串
4、查詢僱員編號和僱員姓名,僱員姓名規定10個長度如果不夠左填充*
select lpad(ename,10,'*') from emp;
select lpad('900','9','0') from dual;
--RPAD(a,b,c)        右填充   返回a被c從右面填充到b長度後的字串  
select rpad(ename,10,'*') from emp;
select rpad('900','9','0') from dual;
--REPLACE(a,b,c) :字串替換  a中的b用c來替換  如果a中存在b的話
          一般用於敏感字元的處理
select replace('習大大今天來我家吃飯','大大','主席') from dual; 
select replace('習大大今天來我家吃飯','大大','******') from dual;  

--TRIM 去除字串頭部或尾部(頭尾)的字元
       一般用於去除首尾空格
select ' hello  world ' from dual;      
select ' hello  world ',trim( ' hello  world ') from dual; 
select 'HelloWorld',trim(leading 'H' from 'HelloWorld') from dual;  --HelloWorld  elloWorld  
select 'HelloWorld',trim(leading 'e' from 'HelloWorld') from dual;  --HelloWorld  HelloWorld  
select 'HelloWorld',trim(trailing 'd' from 'HelloWorld') from dual; --HelloWorld  HelloWorl 
select 'HelloWorld',trim(both 'H' from 'HelloWorldH') from dual;--HelloWorld  elloWorl 
select 'HelloWorld',trim('H' from 'HelloWorldH') from dual;--HelloWorld  elloWorl 

select *  from emp;
select * from emp where lower(ename)=' smith' and empno=7369;

相關文章