首页 > 解决方案 > 将函数输出分配给 Postgres 变量的语法错误

问题描述

我正在尝试编写一个迁移,为表中的每个名称生成一个“排序名称”,其中排序名称与常规名称相同,除了 ' 替换为单个空格,名称转换为小写并且名称中的最后一个单词被移到前面。例如,“John L'Mann”变成“Mann John L”。为了做到这一点,我编写了一个临时函数:

CREATE FUNCTION generate_sort_name(name text) RETURNS text AS $$
DECLARE
    without_quotes text;
    split_name text[];
    all_but_surname text;
BEGIN
without_quotes := (regexp_replace(name, '\''', 'g'));
split_name := (regexp_split_to_array(lower(without_quotes), '\s+'));
CASE WHEN (length(split_name) = 1) THEN RETURN split_name[1];
    ELSE
    all_but_surname := (array_to_string(split_name[1:length(split_name)-1], ' '));
    return split_name[length(split_name)] || ' ' || all_but_surname;
END
END
$$ LANGUAGE plpgsql;

编辑:感谢您提供的信息,我已更正缺少分号和双引号的问题。现在在'END'处或附近出现语法错误 - 我尝试在最后一个'return'行的末尾使用分号或两个分号,以及有和没有分号。

标签: stringpostgresqlstored-functions

解决方案


推荐阅读