PostgreSQL 一行变多行

前端之家收集整理的这篇文章主要介绍了PostgreSQL 一行变多行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

实例表:

  1. postgres=# \d book
  2. Table "public.book"
  3. Column | Type | Modifiers
  4. --------+-------------------+---------------------------------------------------
  5. id | integer | not null default nextval('book_id_seq'::regclass)
  6. name | character varying |
  7. tag | character varying |
  1. postgres=# select * from book;
  2. id | name | tag
  3. ----+------+----------
  4. 1 | java | aa,bb,cc
  5. 2 | C++ | dd,ee
  6. (2 rows)
需要的效果
  1. name | unnest
  2. ------+--------
  3. java | aa
  4. java | bb
  5. java | cc
  6. C++ | dd
  7. C++ | ee
  8. (5 rows)


方法1: unnest(数组,分隔符)

  1. postgres=# select name,unnest(string_to_array(tag,',')) from book;
  2. name | unnest
  3. ------+--------
  4. java | aa
  5. java | bb
  6. java | cc
  7. C++ | dd
  8. C++ | ee
  9. (5 rows)
  1. postgres=# select string_to_array(tag,') from book;
  2. string_to_array
  3. -----------------
  4. {aa,cc}
  5. {dd,ee}
  6. (2 rows)
方法2:regexp_split_to_table(字符串,分隔符)
  1. postgres=# select name,regexp_split_to_table(tag,') from book;
  2. name | regexp_split_to_table
  3. ------+-----------------------
  4. java | aa
  5. java | bb
  6. java | cc
  7. C++ | dd
  8. C++ | ee
  9. (5 rows)

另外,字符串变数组的方法

  1. postgres=# select name,string_to_array(tag,') from book;
  2. name | string_to_array
  3. ------+-----------------
  4. java | {aa,cc}
  5. C++ | {dd,ee}
  6. (2 rows)
  1. postgres=# select name,regexp_split_to_array(tag,') from book;
  2. name | regexp_split_to_array
  3. ------+-----------------------
  4. java | {aa,cc}
  5. C++ | {dd,ee}
  6. (2 rows)

猜你在找的Postgre SQL相关文章