我正在寻找一些帮助分离数据中科学名称的方法。我只想取属名称并将其分组,但是它们都连接在同一列中。我看到SQL Sever有一个CHARINDEX命令,但PostgreSQL没有。是否需要为此创建函数?如果是这样,它将如何?
我想将'Mallotus philippensis'
更改为'Mallotus'
或仅更改为'philippensis'
我目前正在使用Postgres 11、12。
答案 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;
答案 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;