在sql層面實現資料拆分,進行二次操作(實戰解決)

2022-08-27 07:33:12 字數 1825 閱讀 6602

然後在一張員工表中,只有乙個字段(將公司id和部門id拼接成了乙個新字段),那麼我要找到該公司下所有員工,只有先模糊查詢user_source表,獲取該公司下所有的員工id、員工姓名、員工source。那麼資料量有上百條,如果我把這批資料(如上圖所示),放到業務層通過「-」分割,再根據對應的公司id和部門id去查詢對應的公司名稱或者部門名稱,那就是要執行上百條sql了(視某公司的員工數量為準)。那將是乙個很龐大的資料庫讀取操作。

所以我的解決方案就是把其放到sql層面上操作:通過對

資料的分割,在根據對應的去查詢對應的表的公司名稱和部門名稱,所涉及的知識,是乙個sql函式:regexp_split_to_array,他會對使用者設定的分隔符進行對欄位資料的分割,然後返回的是乙個陣列,然後通過下標獲取對應的字串id。

select

user_id as "userid",

user_name as "username",

user_source as "usersource",

(regexp_split_to_array(user_source,'-'))[1] as "classid",

(select

class_name as "classname"

from

jc_classification

where

class_id = (regexp_split_to_array(user_source,'-'))[1]

),(regexp_split_to_array(user_source,'-'))[2],

(select

dept_name as "deptname"

from

jc_department

where

department_id = (regexp_split_to_array(user_source,'-'))[2]

)from

hz_user_info

where

user_level = '2'

and user_source like 'xhrsbx%'

order by user_id;

其查詢出來的結果就是

二、對應該函式的基本用法:

select

user_id as "userid",

user_name as "username",

user_source as "usersource",

(regexp_split_to_array(user_source,'-'))[1],

(regexp_split_to_array(user_source,'-'))[2]

from

hz_user_info

where

user_level = '2'

and user_source like 'xhrsbx%'

order by user_id;

表結構:

SQL資料表層面操作(DDL)

ddl data definition language 資料定義語言 用於對資料庫和資料表的操作,因為操作物件有兩個 資料庫和資料表 所以我們要在每個命令之後 create drop alter show後面加上database或者table 表明自己操作的物件。這篇文章主要講述對資料表 tabl...

在SQL中實現陣列

t sql象陣列一樣處理字串 分割字串 在日常的程式設計過程中,陣列是要經常使用到的。在利用sql對資料庫進行操作時,有時就想在sql使用陣列,比如將1,2,3,4,5拆分成陣列。可惜的是在t sql中不支援陣列。不過還是有變通的辦法。我們可以自己編寫兩函式get strarraylength 取得...

在SQL中實現陣列功能

t sql象陣列一樣處理字串 分割字串 在日常的程式設計過程中,陣列是要經常使用到的。在利用sql對資料庫進行操作時,有時就想在sql使用陣列,比如將1,2,3,4,5拆分成陣列。可惜的是在t sql中不支援陣列。不過還是有變通的辦法。我們可以自己編寫兩函式get strarraylength 取得...