久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Mysql中函數如何在dm中使用

138次閱讀
沒有評論

共計 3326 個字符,預計需要花費 9 分鐘才能閱讀完成。

這篇文章主要介紹 Mysql 中函數如何在 dm 中使用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

一、問題

1、mysql 中存在 FIND_IN_SET 函數,但是在 dm 中是不存在的。解決辦法手動創建 FIND_IN_SET()函數在 dm 是可以實現的,并調用使用的。但是當結果集比較大的時候,效率很低。數據量小的時候可以使用。當時數據量比較大的時候使用 FIND_IN_SET 函數,在 dm 使用會出現字符集截斷的問題。基于以上的問題。在 dm 使用 instr()函數代替 FIND_IN_SET 函數。可以解決效率低和字符串截斷的問題問題。

2、mysql 中存在
group_concat()函數。但在 dm 里是沒有的。可以使用 oracle 中 wm_concat 或者 dm 的 LISTAGG/LISTAGG2 集函數來代替。Dm 中 LISTAGG/LISTAGG2 集函數和 oracle 中 LISTAGG/LISTAGG2 集函數使用方法是一樣的。

二、FIND_IN_SET 函數 1、Mysql 的定義:

MySQL 手冊中 find_in_set 函數的語法解釋:

FIND_IN_SET(str,strlist)。str 要查詢的字符串 strlist 參數以, 分隔的字段名 如 (1,2,6,8,10,22)查詢字段 (strlist) 中包含 (str) 的結果,返回結果為 null 或記錄假如字符串 str 在由 N 個子鏈組成的字符串列表 strlist 中,則返回值的范圍在 1 到 N 之間 一個字符串列表就是一個由一些被 , 符號分開的子鏈組成的字符串如果第一個參數是一個常數字符串,而第二個是 type SET 列,則 FIND_IN_SET() 函數被優化,使用比特計算 如果 str 不在 strlist 或 strlist 為空字符串,則返回值為 0 如任意一個參數為 NULL,則返回值為 NULL 這個函數在第一個參數包含一個逗號 (,) 時將無法正常運行。

SELECT FIND_IN_SET(b , a,b,c,d);結果為:2 因為 b 在 strlist 集合中放在 2 的位置 從 1 開始 select FIND_IN_SET(1 , 1 返回 就是 1 這時候的 strlist 集合有點特殊 只有一個字符串 其實就是要求前一個字符串 一定要在后一個字符串集合中才返回大于 0 的數。select FIND_IN_SET( 2 , 1,2 返回 2。select FIND_IN_SET( 6 , 1 返回 0   strlist 中不存在 str,所以返回 0。

2、自定義的 find_in_set()

create or replace

  function FIND_IN_SET2

  (

  piv_str1 varchar2,

  piv_str2 varchar2)

  return int deterministic

  as

  rt int default 0;

  begin

  with

  a as

  (

  select

  regexp_substr(sqlstr, [^,]+ , 1, level) rval,

  rownum rid

  from

  (

  select piv_str2   sqlstr from dual

  )

  connect by level =regexp_count(sqlstr, ,)+1

  )

  select

  nvl(rid, 0)

  into

  rt

  from

  dual

  left join

  (

  select rid from a where rval=piv_str1

  )

  on

  1=1;

  return rt;

end;

3、網上配置在 oracle 中的 find_in_set()函數定義

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;

4、函數調用案例 find_in_set()進行查詢數據,報字符串截斷。

使用 instr 替代后下效果如下

使用 instr 替代后下效果如下

使用 instr 替代后下效果如下

三、group_concat()函數
1、mysql 中 group_concat() 函數的定義

功能:將 group by 產生的同一個分組中的值連接起來,返回一個字符串結果。

語法:group_concat([distinct] 要連接的字段 [order by 排序字段 asc/desc] [separator 分隔符] )

說明:通過使用 distinct 可以排除重復值;如果希望對結果中的值進行排序,可以使用 order by 子句;separator 是一個字符串值,缺省為一個逗號。

 

2、在 dm 用 wm_concat 或者 dm 的 LISTAGG/LISTAGG2
集函數 1、wm_concat

介紹:其函數在 Oracle 10g 推出,在 10g 版本中,返回字符串類型,在 11g 版本中返回 clob 類型。

括號里面的參數是列,而且可以是多個列的集合,也就是說在括號里面可以自由地用‘||’合并字符串。

用法 1:Select aaa, wmsys.wm_concat(bbb || ( || ccc ||) ) from table group by aaa

用法 2:Select aaa, wmsys.wm_concat(bbb || ( || ccc ||) ) over(partition by aaa) from table

舉例:

2、LISTAGG() 簡介

介紹:其函數在 Oracle 11g 版本中推出,對分組后的數據按照一定的排序進行字符串連接。

其中,“[,]”表示字符串連接的分隔符,如果選擇使用 [over (partition by)] 則會使其變成分析函數;

用法 1:SELECT aaa, listagg(bbb, ,) within GROUP (ORDER BY aaa) FROM table  GROUP BY aaa

用法 2:SELECT aaa, listagg(bbb, ,) within GROUP (ORDER BY aaa) over(partition by aaa) FROM table

舉例:listagg(ORGAN_CODE, ,)within group(order  by1) listagg

 

以上是“Mysql 中函數如何在 dm 中使用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-20發表,共計3326字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 宜良县| 登封市| 年辖:市辖区| 府谷县| 达拉特旗| 温宿县| 南木林县| 贞丰县| 福贡县| 阿坝县| 滨州市| 涞水县| 甘泉县| 阿拉善左旗| 沽源县| 临沧市| 鄂托克旗| 略阳县| 和林格尔县| 尚志市| 龙门县| 明星| 新安县| 潞西市| 泸西县| 阿瓦提县| 深州市| 如东县| 京山县| 平南县| 利川市| 灵山县| 莱西市| 胶州市| 大庆市| 昌吉市| 水富县| 江西省| 宝清县| 乌苏市| 兖州市|