常用oracle字串函數:
尋找字串匹配,返回匹配開始索引
instr(源字串, 目標字串, 起始位置, 匹配序號):
源字串:沒啥好說的
目標字串:需要匹配的字串
起始位置:源字串的開始匹配索引,從1開始
匹配序號:因為這個函數返回匹配的起始索引,所以如果有多個匹配,則用此確定返回第幾個匹配的起始索引
截取並返回子字串
substr(源字串,起始位置,截取位元)
參數顧名思義
--------------------------------------數值函數------------------------------------------
--1、取一個數的大,小整數用floor()和ceil()
select floor(123.45) as "取123.45的小整數",ceil(123.45) as "取123.45的大整數" from
dual
--結果:取123.45的小整數 取123.45的大整數
--
123 124
--2、數值的截取和去小數位,
--兩個數中任意一個轉換為浮點數後,整型的就會轉換為浮點數再進行運算
select
cast(165*100 as float)/347 from dual
select (40*100.0)/(123*1.0) 原數值,substr((40*100.0)/(123*1.0),5,2)
截取值,ROUND((40*100.0)/(123*1.0),1)固定小數位值 from
dual;
--結果:原數值 截取值 固定小數位值
--
32.520325203252 20 32.5
--3、如何分別取一個小數的整數部分和小數部分呀,比如19.1657589,取出來整數為19,小數為1657589?sql中截取固定小數位、整數部分、小數部分:
select
cast(19.1657589 as decimal(6,3)) 固定小數位,cast(19.1657589 as int)
整數部分,19.1657589-cast(19.031 as int) 小數部分 from dual;
-- 結果:
固定小數位 整數部分 小數部分
19.166
19 0.1657589
--4、可以使用substr()和instr()截取欄位,在sql中使用CHARINDEX函數或LEFT或RIGHT函數,在oracle中沒有
select
substr('張三:一班:男',instr('張三:一班:男',':',1,1)+1,2) as 班級,instr('張三:一班:男',':',1,1)+1
開始位置 from dual
--結果: 班級 開始位置
-- 一班 4
oracleRegex:
從10G開始支援
內建了四個函數
REGEXP_LIKEREGEXP_INSTRREGEXP_SUBSTRREGEXP_REPLACE
顧名思義,沒啥好講的
跟javaRegex的區別主要在字元簇上,oracle如此表示:
字元簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何數字。
[[:alnum:]] 任何字母和數字。
[[:space:]] 任何白字元。
[[:upper:]] 任何大寫字母。
[[:lower:]] 任何小寫字母。
[[unct:]] 任何標點符號。
[[:xdigit:]] 任何16進位的數字,相當於[0-9a-fA-F]。