相信大家都知道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...