使用Postgres将字符串分割成单词

时间:2019-10-22 09:44:43

标签: sql postgresql split

我正在寻找一些帮助分离数据中科学名称的方法。我只想取属名称并将其分组,但是它们都连接在同一列中。我看到SQL Sever有一个CHARINDEX命令,但PostgreSQL没有。是否需要为此创建函数?如果是这样,它将如何?

我想将'Mallotus philippensis'更改为'Mallotus'或仅更改为'philippensis'

我目前正在使用Postgres 11、12。

2 个答案:

答案 0 :(得分:1)

使用SPLIT_PART

WITH yourTable AS (
    SELECT 'Mallotus philippensis'::text AS genus
)

SELECT
    SPLIT_PART(genus, ' ', 1) AS genus,
    SPLIT_PART(genus, ' ', 2) AS species
FROM yourTable;

Demo

答案 1 :(得分:0)

在这里,string_to_array的效率可能比split_part稍微高一点,因为每行只对字符串进行一次拆分。

SELECT
  val_arr[1] AS genus,
  val_arr[2] AS species
FROM (
  SELECT string_to_array(val, ' ') as val_arr
  FROM (
    VALUES
      ('aaa bbb'),
      ('cc dddd'),
      ('e fffff')
  ) t (val)
) tt;