亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PostgreSQL 字符串拆分與合并案例

 更新時間:2021年01月04日 15:23:53   作者:besokuse233  
這篇文章主要介紹了PostgreSQL 字符串拆分與合并案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

我就廢話不多說了,大家還是直接看代碼吧~

with person_name as (
  select c.id,
      array_to_string(array_agg(distinct p.c_name), ' , ') as p_name
  from biz_notification_config c
       join biz_notification_person p
         on p.id =
           any (string_to_array(c.persons, ',')::int[])
  group by c.id
),
   group_name as (
     select c.id,
        array_to_string(array_agg(distinct g.c_name), ' , ') as g_name
     from biz_notification_config c
         join biz_notification_group g
            on g.id = any (string_to_array(c.c_groups, ',')::int[])
     group by c.id
   )
select config.*, person_name.p_name, group_name.g_name
from biz_notification_config config
     left join person_name
          on config.id = person_name.id
     left join group_name
          on config.id = group_name.id;

array_to_string(array_agg(distinct g.c_name), ' , '):將數組轉換為字符串,用“,”分隔。(有點類似于Mysql的group_concat()函數)。

array_agg(distinct 想要合并的數據):將想要的數據變成數組。

string_to_array(c.c_groups, ‘,'):將字符串按照“,”分隔成數組。

any (String(varchar)::int[]):將字符串轉換為整形。

id = any(List):id的值存在于List中,注意List要和id為同種類型。

補充:POSTGRESQL 與MYSQL 實現(xiàn)分割字符串的方法對比

實現(xiàn)分割字符串。

MYSQL版本。 由于MYSQL不支持遞歸,不支持返回表類型的結果,所以代碼比較繁瑣。 我用了兩個函數以及一個存儲過程來實現(xiàn)。

-- 得到分割符的總數。

DELIMITER $$ 
 
CREATE DEFINER=`root`@`%` FUNCTION `func_get_split_string_total`(
f_string VARCHAR(1000),f_delimiter VARCHAR(5)
) RETURNS INT(11)
BEGIN
 -- Get the total number of given string.
 RETURN 1+(LENGTH(f_string) - LENGTH(REPLACE(f_string,f_delimiter,'')));
END$$ 
 
DELIMITER ;

-- 得到具體下表的子字符。

DELIMITER $$ 
 
CREATE DEFINER=`root`@`%` FUNCTION `func_get_split_string`(
f_string VARCHAR(1000),f_delimiter VARCHAR(5),f_order INT) RETURNS VARCHAR(255) CHARSET utf8
BEGIN
 -- Get the separated number of given string.
 DECLARE result VARCHAR(255) DEFAULT '';
 SET result = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(f_string,f_delimiter,f_order)),f_delimiter,1));
 RETURN result;
END$$ 
 
DELIMITER ;

-- 打印結果。 用臨時表來實現(xiàn)。

DELIMITER $$ 
 
CREATE PROCEDURE `sp_print_result`(
 IN f_string VARCHAR(1000),IN f_delimiter VARCHAR(5)
)
BEGIN
 -- Get the separated string.
 DECLARE cnt INT DEFAULT 0;
 DECLARE i INT DEFAULT 0;
 SET cnt = func_get_split_string_total(f_string,f_delimiter);
 DROP TABLE IF EXISTS tmp_print;
 CREATE TEMPORARY TABLE tmp_print (v_text varchar(200) NOT NULL);
 WHILE i < cnt
 DO
  SET i = i + 1;
  INSERT INTO tmp_print(v_text) VALUES (func_get_split_string(f_string,f_delimiter,i));
 END WHILE;
 SELECT * FROM tmp_print;
 
END$$ 
 
DELIMITER ;

我們來執(zhí)行:

CALL sp_print_result('love,you,hate,number',',');
query result
v_text 
love 
you 
hate 
number 

PostgreSQL比較靈活, 有以下幾種方法來實現(xiàn)。

第一種,普通的分析字符串方法。

 create or replace function split_to_string(
IN f_string text, 
IN f_delimiter varchar(10)
) returns setof text as
$ytt$
 declare cnt int;
 declare i int;
 declare v_result text;
 begin
   i := 1;
   cnt := length(f_string) - length(replace(f_string,f_delimiter,''))+1;
   while i <= cnt
   loop
    v_result := split_part(f_string,f_delimiter,i);
 return next v_result;
    i := i + 1;
   end loop; 
 
 end;
$ytt$ language plpgsql;

結果:

t_girl=# select split_to_string('love,you,hate,number',',') as result;
 result 
--------
 love
 you
 hate
 number
(4 rows)

第二種, 用自己帶的正則函數來實現(xiàn)。

t_girl=# SELECT ytt FROM regexp_split_to_table('love,you,hate,number', E',+') AS ytt;
 ytt  
--------
 love
 you
 hate
 number
(4 rows) 
 
t_girl=# 

第三種,用自帶的WITH 語法來實現(xiàn)。

t_girl=# with recursive ytt(f1,f2) as (
values (0,' '::text) 
union all 
select f1+1,split_part('love,you,hate,number',',',f1+1) from ytt where f1 < 20 
) 
select f2 as result from ytt where f1 >=1 and f1 <= length('love,you,hate,number')-length(replace('love,you,hate,number',',',''))+1;
 result 
--------
 love
 you
 hate
 number
(4 rows)
 
Time: 0.742 ms

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關文章

  • PostgreSQL數據庫命令行執(zhí)行SQL腳本的三種方式

    PostgreSQL數據庫命令行執(zhí)行SQL腳本的三種方式

    生成環(huán)境中,出于安全性等原因,往往不提供數據庫連接工具,所以對數據庫的更新和升級就得通過命令行來實現(xiàn),本文總結了三種命令行執(zhí)行sql腳本的方式,需要的朋友可以參考下
    2024-02-02
  • PostgreSQL實時查看數據庫實例正在執(zhí)行的SQL語句實例詳解

    PostgreSQL實時查看數據庫實例正在執(zhí)行的SQL語句實例詳解

    在任何數據庫中,分析和優(yōu)化SQL的執(zhí)行,最重要的工作就是執(zhí)行計劃的解讀,而說到執(zhí)行計劃得先了解postgresql的查詢執(zhí)行過程,下面這篇文章主要給大家介紹了關于PostgreSQL實時查看數據庫實例正在執(zhí)行的SQL語句的相關資料,需要的朋友可以參考下
    2023-01-01
  • postgreSQL 數字與字符串類型轉換操作

    postgreSQL 數字與字符串類型轉換操作

    這篇文章主要介紹了postgreSQL 數字與字符串類型轉換操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 將PostgreSQL的數據實時同步到Doris的技巧分享

    將PostgreSQL的數據實時同步到Doris的技巧分享

    眾所周知,在兩個毫不相干的數據管理系統(tǒng)之間進行數據同步,特別是實時同步,其復雜程度足以讓高級DBA腦瓜疼,本文給大家介紹了將PostgreSQL的數據實時同步到Doris的技巧分享,需要的朋友可以參考下
    2024-03-03
  • postgresql 啟動與停止操作

    postgresql 啟動與停止操作

    這篇文章主要介紹了postgresql 啟動與停止操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • shell腳本操作postgresql的方法

    shell腳本操作postgresql的方法

    PostgreSQL支持大部分的SQL標準并且提供了很多其他現(xiàn)代特性,如復雜查詢、外鍵、觸發(fā)器、視圖、事務完整性、多版本并發(fā)控制等這篇文章主要介紹了shell腳本操作postgresql,需要的朋友可以參考下
    2022-12-12
  • PostgreSQL 實現(xiàn)子查詢返回多行的案例

    PostgreSQL 實現(xiàn)子查詢返回多行的案例

    這篇文章主要介紹了PostgreSQL 實現(xiàn)子查詢返回多行的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Postgresql數據庫SQL字段拼接方法

    Postgresql數據庫SQL字段拼接方法

    Postgresql里面內置了很多的實用函數,下面這篇文章主要給大家介紹了關于Postgresql數據庫SQL字段拼接方法的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • 在postgreSQL中運行sql腳本和pg_restore命令方式

    在postgreSQL中運行sql腳本和pg_restore命令方式

    這篇文章主要介紹了在postgreSQL中運行sql腳本和pg_restore命令方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL數據類型格式化函數操作

    PostgreSQL數據類型格式化函數操作

    這篇文章主要介紹了PostgreSQL數據類型格式化函數操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論