六 Oracle學習筆記 字串函式

2021-08-22 06:03:38 字數 3701 閱讀 1972

一、字串操作

char:定長字串型別(無論存多少資料都是固定長度的大小,最大長度為2000個位元組),不指定長度時預設為乙個位元組

varchar2:可變長字串型別,最大長度為4000個位元組,必須指定長度

long:varchar2的加長版,最大長度為2g位元組。但是乙個表中只能有乙個long型別的字段,此字段還不能作為主鍵,也不能做索引

colb:可代替long型別,最大長度4g位元組,沒有約束

預設單位:位元組

如:char(10),表示占用記憶體10個位元組

相當於char(10 byte)

也可以指定單位為字元char

如:char(10 char):表示記憶體占用10個字元,占用的位元組數與字符集有關

(1)函式:拼接函式(可以使用||代替拼接函式)

--格式:

concat(p1,p2):將字串p1和p2進行無縫拼接

--練習:將字串"hello"和"kitty"進行拼接

select concat('hello','kitty') from dual;

--練習:將字串"hello"和"kitty"拼接成"hello kitty"

select concat('hello',concat(' ','kitty')) from dual;

--練習:將emp表的每個員工的名稱和職位拼到一起

select concat(ename,job) from emp;

--練習:可以給查詢顯示的字段起別名

select ename||'#'||job as "拼接結果" from emp;

(2) 函式:統計長度函式

--格式:length(p1)

--練習:統計一下'hello kitty'的字串長度

select length('hello kitty') len from dual;

--練習:統計一下所有員工的姓名和長度,要求顯示姓名和長度

select ename,length(ename) as len from emp;

--練習:將員工的姓名和職位用||拼起來後統計長度,並顯示員工的姓名和職位

select ename,job,length(ename||job) as len from emp;

(3)函式:補位函式

--格式:左補位:lpad(p1,n,p2),相當於右對齊,表示使用p2在p1左邊進行補位,總長度為n,n單位為位元組;

--練習:使用#在字串'hello'前進行補充,使整個字串的總長度為20

select lpad('hello',20,'#') from dual;

--練習:查詢所有員工的姓名在姓名前使用空格進行補位,總長度為20

select lpad(ename,20,' ') from emp;

--練習:查詢所有員工的姓名和職位,使職位右對齊

select ename,lpad(job,10,' ') from emp;

--格式:右補位:rpad(p1,n,p2),相當於左對齊,表示使用p2在p1右邊進行補位,總長度為n,n單位為位元組;

--練習:統計一下所有的員工的姓名長度,姓名,在姓名後新增空格使長度到20,並統計加空格後的長度

select length(ename),ename,rpad(ename,20,' '),length(rpad(ename,20,' ')) from emp;

(4)函式:大小寫函式

--格式:lower(p):將p中的字母都變成小寫

--格式:upper(p):將p中的字母都程式設計大寫

--格式:initcap(p):將p中的首字母大寫,其他小寫,空格隔開算乙個單詞

--練習:分別使用三個函式顯示每乙個員工的名稱

select lower(ename),upper(ename),initcap(ename) from emp;

--練習:分別使用三個函式顯示"no zuo no die"

select lower('no zuo no die'),upper('no zuo no die') ,initcap('no zuo no die') from dual;

(5)函式:截去函式

--格式:

trim( p2 from p1):從p1前後截去p2,p2必須是乙個字元

--練習:截去'上海自來水來自海上'截去'上'

select trim('上' from '上海自來水來自海上') as ex1 from dual;

--練習:截去"aaabbbcsdsdsweaaa"的'a'

select trim('a' from 'aaabbbcsdsdsweaaa') as ex2 from dual;

--格式:ltrim(p1,p2):從p1左邊截去含有p2的任意字元都可以截去,從p1左邊開始,如果p1要截去的字元p2沒有就停止操作

--練習:使用左截去對"abcdefgabc",截去,"abc"

select ltrim('abcdefgabc','abc') from dual;     

--格式:rtrim(p1,p2):從p1右邊截去含有p2的任意字元都可以截去,從p1右邊開始,如果p1要截去的字元p2沒有就停止操作

(6)函式:擷取子串函式

--格式:

substr(p1,startindex,length):取子串,對p1進行擷取,從start位置開始往後擷取,沒有第三個引數時,

擷取到最後,有第三個引數時,len表示擷取到長度,start從0~1時,表示從頭擷取;start為負數時,表示從後往前數的第start個

--練習:擷取"no zuo no die"中的"zuo no"

select substr('no zuo no die',2,6) from dual;

--練習:從倒數第四個位置開始擷取'no zuo no die'

select substr('no zuo no die',-4) from dual;

(7)函式:檢索函式

--格式:instr(p1,p2,m,n),作用返回p2在p1的什麼位置上

m:表示從p1的哪個位置開始

n:表示p2第幾次出現的位置  

instr(p1,p2)  

m,n可有可無,沒有m,n的時候表示從頭開始,查詢第一次出現的位置                                   

--練習:查詢子串'no'在字串'no zuo no die'第一,二次出現的位置

select instr('no zuo no die','no',1,1) as 位置 from dual;

select instr('no zuo no die','no',1,2) as 位置 from dual;

--練習:查詢子串在字串中從位置4開始,往後第二次出現的位置

select instr('no zuo no die','no',4,2) as 位置 from dual;

注:查詢不到返回值為0

Python學習筆記 字串的常用方法與函式

方法 函式 解釋s.title 每個單詞首字母大寫 s.lower 全小寫s.upper 全大寫注意以上方法不會改變字串s本身,而是產生新的字串。name john johnson print name.title print name john johnson john johnson方法 函式 ...

oracle function 分割字串函式

這個函式要用到,記錄下 create or replace function split src varchar2,delimiter varchar2 src 分割的字串,delimiter 分隔符 return t str20list is psrc varchar2 500 a t str20...

字串 學習筆記

這篇部落格只是記錄一下我在做題過程中碰到的一些關於字串巧妙的處理方式 可能只對我這個菜雞來說相對巧妙吧 1 stringstream的使用 第一次碰到stringstream的使用是在紫書上面p112,題目是uva10815。前幾天補字串的題目的時候在 洛谷p1308統計單詞數 也碰到了一題可以使用...