Oracle的find in set 函式的使用

2021-09-28 15:52:32 字數 2115 閱讀 8080

相信大家都知道mysql 的find_in_set()函式的使用。

這裡也大概重新講一下

mysql手冊中find_in_set函式的語法:

find_in_set(str,strlist)

str 要查詢的字串

strlist 欄位名 引數以」,」分隔 如 (1,2,6,8)

查詢字段(strlist)中包含(str)的結果,返回結果為null或記錄

現在的話oracle也有實現方法了。

create or replace  

function find_in_set(piv_str1 varchar2, piv_str2 varchar2, p_sep varchar2 := ',')

return number is

l_idx number:=0; -- 用於計算piv_str2中分隔符的位置

str varchar2(500); -- 根據分隔符擷取的子字串

piv_str varchar2(500) := piv_str2; -- 將piv_str2賦值給piv_str

res number:=0; -- 返回結果

loopindex number:=0;

begin

-- 如果piv_str中沒有分割符,直接判斷piv_str1和piv_str是否相等,相等 res=1

if instr(piv_str, p_sep, 1) = 0 then

if piv_str = piv_str1 then

res:= 1;

end if;

else

-- 迴圈按分隔符擷取piv_str

loop

l_idx := instr(piv_str,p_sep);

loopindex:=loopindex+1;

-- 當piv_str中還有分隔符時

if l_idx > 0 then

-- 擷取第乙個分隔符前的字段str

str:= substr(piv_str,1,l_idx-1);

-- 判斷 str 和piv_str1 是否相等,相等 res=1 並結束迴圈判斷

if str = piv_str1 then

res:= loopindex;

exit;

end if;

piv_str := substr(piv_str,l_idx+length(p_sep));

else

-- 當擷取後的piv_str 中不存在分割符時,判斷piv_str和piv_str1是否相等,相等 res=1

if piv_str = piv_str1 then

res:= loopindex;

end if;

-- 無論最後是否相等,都跳出迴圈

exit;

end if;

end loop;

-- 結束迴圈

end if;

-- 返回res

return res;

end find_in_set;

使用效果:

允許使用非逗號(,)的其他字元

這樣如果從mysql移植到oracle的一些sql指令碼使用就方便多了。

在別人的基礎上修改,不再是只返回1,現在是在哪個位置就返回位置值。

oracle學習總結 oracle的介紹

1 資料庫的三層結構 client 專用於訪問資料庫 dbms database management system db例項 多個 db例項有很多資料物件 例 表,包,檢視,序列,函式,觸發器,索引 2 在專案中如何選擇資料庫 1 標的 2 功能 3 併發性問題 4 安全 穩定 5 作業系統 un...

oracle 2 oracle的使用者

1 dbca oracle的dbca主要用來管理資料庫,包括建立資料庫 刪除資料庫等。注意 建立資料庫的時候,密碼不能全是數字,也不能以數字開頭 2 ofa oracle flexible architecture oracle優化靈活結構 作用 多oracle版本的管理 ora90 資料庫管理工具...

oracle部分 oracle的分頁查詢

oracle的分頁查詢 問題 當乙個表中的資料量特別大的時候,如果一次性全部顯示給使用者,則造成頁面過於龐大,體驗極差。解決 使用分頁查詢 使用 rownum關鍵字 oracle對外提供的自動給查詢結果編號的關鍵字,與每行的資料沒有關係。注意 rownum關鍵字只能做 的判斷,不能進行 的判斷 se...