91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql中函數如何在dm中使用

發布時間:2021-11-11 10:57:59 來源:億速云 閱讀:528 作者:小新 欄目:數據庫

這篇文章主要介紹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替代后下效果如下

Mysql中函數如何在dm中使用

使用instr替代后下效果如下

Mysql中函數如何在dm中使用

Mysql中函數如何在dm中使用

三、group_concat()函數

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

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

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

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

 Mysql中函數如何在dm中使用

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

舉例:

Mysql中函數如何在dm中使用

Mysql中函數如何在dm中使用

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中使用

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邻水| 六枝特区| 随州市| 松潘县| 南雄市| 两当县| 民和| 马边| 开阳县| 平潭县| 舒城县| 宝鸡市| 克什克腾旗| 望奎县| 冷水江市| 卢湾区| 富平县| 特克斯县| 湘阴县| 河东区| 资溪县| 乐平市| 保靖县| 吴江市| 仙居县| 体育| 健康| 石屏县| 江永县| 南丰县| 舒城县| 沈阳市| 通许县| 平邑县| 新巴尔虎右旗| 铜陵市| 浙江省| 海丰县| 柳江县| 朝阳县| 化隆|